3

最近はKonvaJSで遊んでいます。clickにイベントリスナーを設定しましたshape。をクリックするshapeと、リスナーが呼び出されます。私のリスナーではevent.preventDefault()、他のイベントのトリガーを停止するメソッドを呼び出しています。しかし、私がそうすると、次のように表示されます。

キャッチされていない TypeError: event.preventDefault は関数ではありません

何が欠けているのかわからない。これが私のコードです:

<!DOCTYPE html>
<html>

<head>
  <script src="https://cdn.rawgit.com/konvajs/konva/0.9.5/konva.min.js"></script>
  <meta charset="utf-8">
  <title>Konva Scale Animation Demo</title>
  <style>
    body {
      margin: 0;
      padding: 0;
      overflow: hidden;
      background-color: #F0F0F0;
    }
  </style>
</head>

<body>
  <div id="container"></div>
  <script>
    var width = window.innerWidth;
    var height = window.innerHeight;

    var stage = new Konva.Stage({
      container: 'container',
      width: width,
      height: height
    });

    var layer = new Konva.Layer();

    stage.add(layer);

    var gArrow2 = new Image();
     var circle2 = new Konva.Image({

        x: 60, //on canvas
        y: 60,
        image: gArrow2,
        name: 'abc',
        id: 'xyz',
        draggable:true
      });
      circle2.on('click',function(event){
        event.preventDefault()
        console.log(e.type);
      });
      circle2.on('mouseup',function(event){
         event.preventDefault()
        console.log(e.type);
      });
    gArrow2.onload = function() {
     
      layer.add(circle2);
      layer.draw();
    }
    gArrow2.src = 'http://konvajs.github.io/assets/snake.png';

    var period = 1500;
    var amplitude = 10;
    var centerX = stage.getWidth() / 2;
    var centerY = stage.getHeight() / 2;

    var anim = new Konva.Animation(function(frame) {
      circle2.setY(amplitude * Math.sin(frame.time * 2 * Math.PI / period) + centerY);
    }, layer);

    anim.start();
  </script>

</body>

</html> 
4

2 に答える 2

6

KonvaJS のonハンドラーはブラウザー イベントを直接提供するのではなく、次のようなオブジェクトを提供するようですここに画像の説明を入力

ブラウザーの元のイベントは、evtプロパティに格納されます。

コードで、http://plnkr.co/edit/tCESd42r67TzeuLiISxUevent.preventDefault()に置き換えてみてevent.evt.preventDefault()ください。

于 2015-09-04T13:07:30.090 に答える
1

他のイベントがトリガーされないようにする場合は、に設定できるKonvaJSプロパティが呼び出さcancelBubbleれます。これを使用することで、関数を探す必要がなくなります。これがデモ用の plunkrです。eventtrueevent.preventDefault()

triangle.on('mouseup', function(e) {
      e.cancelBubble = true;
      console.log('Triangle mouse up');
    });
于 2016-08-03T08:04:14.443 に答える