单击形状上的事件在kineticjs中不起作用

时间:2015-01-17 14:51:57

标签: javascript canvas kineticjs

我想在形状上发生点击事件时打印信息。它根本不会发射,而且拖拽也不起作用。我怎样才能完成这项工作?有人可以帮忙吗?

JS代码

 $(function(){
    var stage = new Kinetic.Stage({
        container: 'toolbar',
        width: $("#gamebox").width(),
        height: window.innerHeight * 0.9,
        listening: true
   });
  var layer = new Kinetic.Layer();
  stage.add(layer);
  var line = new Kinetic.Shape({
            drawFunc: function (canvas) {
             console.log("shape");
            var context = canvas.getContext();
            context.beginPath();
            context.moveTo(20,5);
            context.quadraticCurveTo(10, 35, 20, 60);
            context.moveTo(20,5);
            context.quadraticCurveTo(30, 35, 20, 60);
            canvas.stroke(this);
            context.fillStyle = 'black';
            context.fill();
        },
         strokeWidth: 2,
        draggable: true
    });

    line.on('click', function() {
        alert("click detected");
    });
    layer.add(line);
    stage.add(layer);
 });

HTML代码

<div id="toolbar">        
</div>
<div id="gamebox">
</div>

1 个答案:

答案 0 :(得分:2)

在最新版本的KineticJS(我认为5.0+)中,包装的上下文被输入drawFunc。

请注意,此包装上下文是画布上下文的子集,并且没有所有画布上下文方法。例如,合成不可用。

以下是使用KineticJS 5.1.0的代码的工作示例:

var stage = new Kinetic.Stage({
  container: 'container',
  width: 350,
  height: 350
});
var layer = new Kinetic.Layer();
stage.add(layer);


var line=new Kinetic.Shape({
  x:0,
  y:0,
  stroke:"blue",
  fill: 'red',
  drawFunc: function(context) {
    context.beginPath();
    context.moveTo(20,5);
    context.quadraticCurveTo(10, 35, 20, 60);
    context.moveTo(20,5);
    context.quadraticCurveTo(30, 35, 20, 60);
    context.fillStrokeShape(this);
  }
});
layer.add(line);

line.on('click', function() {
  alert("click detected");
});

layer.draw();
body{padding:20px;}
#container{
  border:solid 1px #ccc;
  margin-top: 10px;
  width:350px;
  height:350px;
}
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.1.0.min.js"></script>
<h4>Click the shape.</h4>
<div id="container"></div>