我有一个动力学阶段和一些可拖动的物体。 (例如,请参阅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),但这似乎并没有起作用。
有什么想法吗?
答案 0 :(得分:0)
尝试使用GitHub的最新版本。它只有鼠标左键功能。