javascript - 从 "dragmove"回调中移动层后事件丢失

标签 javascript kineticjs

我有一个可以移动图层的滚动条,因此该图层在滚动条的“dragmove”回调中移动。这会导致所有绑定(bind)事件在移动的图层上断开连接!

请看这个 fiddle :http://jsfiddle.net/NY4QK/10/

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

var fixedLayer = new Kinetic.Layer();
stage.add(fixedLayer);

var old_x = 100;
var old_y = 100;

var scroller = new Kinetic.Circle({
    x: old_x,
    y: old_y,
    radius: 10,
    fill: '#00F',
    stroke: 'black',
    strokeWidth: 4,
    draggable: true
});

scroller.on('dragmove', function(event){
    var pos = scroller.getAbsolutePosition();
    layer.move(pos.x - old_x, pos.y - old_y);
    old_x = pos.x;
    old_y = pos.y;
    layer.draw();
});

fixedLayer.add(scroller);

var layer = new Kinetic.Layer();
stage.add(layer);

var rect = new Kinetic.Rect({
    x: 10,
    y: 10,
    width: 50,
    height: 50,
    fill: '#0F0',
    stroke: 'black',
    strokeWidth: 4
});


rect.on('click', function(){
    rect.remove();
    layer.draw();
});

layer.add(rect);

layer.draw();
fixedLayer.draw();

这是一个错误还是我做错了什么?

最佳答案

当您使用拖动事件时,KineticJS 在顶部创建一个临时层,因此您的事件在 dragmove 之后不会注册。

只需为 dragend 添加另一个处理程序,如下所示:

scroller.on('dragend', function(event){
    layer.moveToTop();
    layer.draw();
});

这是updated fiddle .

有关您遇到的问题的更多详细信息/说明,请检查:https://github.com/ericdrowell/KineticJS/issues/219

关于javascript - 从 "dragmove"回调中移动层后事件丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676906/

相关文章:

javascript - 如何使用 window.print 在打印预览中设置默认选中/启用的背景图形选项

javascript - KineticJS 如何从图层获取颜色(来自图层的颜色选择器)

javascript - 在 Canvas 上绘制平滑的线条

javascript - 显示 JavaScript 函数/值

javascript - .remove() 在成功函数上不使用 ajax

javascript - Angular 2,在 ng build --prod 之后,ui-router 停止工作

javascript - 防止圆圈在 KineticJS 中闪烁

javascript - 是否可以从 javascript 访问 EWS 托管 API

z-index - 动态 js zindex

javascript - kinetic JS onFinish隐藏节点数组