我试图通过单击来破坏一个形状,但是在它被破坏之后,这个形状的 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();
});