KineticJS取消拖动而不是停止阻力?

时间:2014-08-20 19:53:14

标签: events kineticjs

我有一个动力学阶段和一些可拖动的物体。 (例如,请参阅fiddle。)

我的目标是让用户始终能够在中间点击以平移整个舞台,无论他是否在空白空间或绘制到舞台上的任何形状中间点击。我需要以不破坏现有形状的拖动事件的方式执行此操作。意思是我需要正常处理形状dragStart和dragEnd事件,但只需要左键单击拖动。

我能够检测到舞台上的中间点击事件,并且如果在一个上启动拖动,则调用形状上的dragStop(),但调用dragStop()意味着触发了dragstop事件并且处理发生在形状。

// let's pretend that a mouse doesn't have more than 9 buttons
var mouseDown = [0, 0, 0, 0, 0, 0, 0, 0, 0];
var mouseDownCount = 0;
document.body.onmousedown = function(evt) { 
  ++mouseDown[evt.button];
  ++mouseDownCount;
}
document.body.onmouseup = function(evt) {
  --mouseDown[evt.button];
  --mouseDownCount;
}

stage.on('dragstart', function(e){
    if(mouseDownCount){
        if(mouseDown[0]){
            // Left mouse button drag

            if (e.target.nodeType == 'Stage'){
                // stop the drag for left click
                e.target.stopDrag();
            }

        } else if (mouseDown[1]){
            // Middle mouse button drag
            if (e.target.nodeType != 'Stage'){
                // stop the drag of the object for left click
                e.target.listening(false);
                e.target.stopDrag();
                e.target.listening(true);

                // start the stage drag
                e.target.getStage().startDrag()
            }

        }
    }
});

有没有办法在触发后取消dragStart事件,或以其他方式告诉dragEnd不要触发?我在调用dragStop之前尝试过设置e.target.listening(false),但这似乎并没有起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试使用GitHub的最新版本。它只有鼠标左键功能。