我试图通过点击来破坏一个形状,但在它被破坏后,这个形状的mouseleave事件处理程序仍在被触发(控制台中的错误)。我假设KineticJS会解除对被破坏形状的所有事件的绑定。因此,基本上的问题是,如果我想在KineticJS中销毁某个形状,是否必须手动禁用该形状的所有事件侦听器。
以下是jsfiddle的链接和代码:
http://jsfiddle.net/evNyp/8/
var stage = new Kinetic.Stage({
container: 'container',
width: 578,
height: 200
});
var layer = new Kinetic.Layer();
// dashed line
var greenLine = new Kinetic.Line({
points: [73, 70, 340, 23, 450, 60, 500, 20],
stroke: 'green',
strokeWidth: 10,
lineJoin: 'round',
dashArray: [10, 5],
dashArrayEnabled: false
});
layer.add(greenLine);
stage.add(layer);
greenLine.on('mouseenter', function() {
console.log('enter');
this.setDashArrayEnabled(true);
this.getLayer().draw();
});
greenLine.on('mouseleave', function() {
console.log('leave');
this.setDashArrayEnabled(false);
this.getLayer().draw();
});
greenLine.on('click', function() {
//this.off('mouseleave');
this.destroy();
layer.draw();
});