Javascript Paper.js区分点击和拖动事件

Javascript Paper.js区分点击和拖动事件,javascript,events,javascript-events,drag,paperjs,Javascript,Events,Javascript Events,Drag,Paperjs,对于Paper.js项目,我有一个click事件处理程序和一个mousedrag事件处理程序 item.on('click', function(event) { event.stopPropagation(); event.preventDefault(); //... }); item.on('mousedrag', function(event) { event.stopPropagation(); event.preventDefault(); //...

对于Paper.js项目,我有一个click事件处理程序和一个mousedrag事件处理程序

item.on('click', function(event) {
  event.stopPropagation();
  event.preventDefault();
  //...  
});

item.on('mousedrag', function(event) {
  event.stopPropagation();
  event.preventDefault();
  //...  
});

每当我引起mousedrag事件时,也会生成一个click事件。如何防止这种情况发生?

单击鼠标然后释放鼠标时,会生成一个单击事件。按住鼠标并拖动鼠标时,将生成拖动事件。除了“mousedrag”之外,我通常通过在“mousedown”和“mouseup”上设置事件来实现这一点

我发现,如果从“mousedrag”事件处理程序返回false,它将抑制进一步的事件,即不会调用“mouseup”或“click”。这是一张示意图。如果在“mousedrag”处理程序中取消注释
return false
,则不会得到“mouseup”或“click”事件

下面是我通常如何实现它的示例代码-直到今晚查看代码,我才发现处理程序返回false会抑制进一步的处理

var drag;

view.on('mousedown', function(e) {
    drag = false;
});

view.on('mousedrag', function(e) {
    drag = true;
    // do whatever else you need to when dragging the mouse
});

view.on('mouseup', function(e) {
    // see if it was just a click and handle that
    if (drag) {
        // handle the end of a drag
    } else {
        // do whatever a click down/up without drag needs to do
    }

});

虽然您上面的传统模式满足了我的需要,但我无法复制您所说的使用
return false
,即使是在草图中。你可能是在圈外拖拉吗?那就不一样了。你说得对——我在圈外拖。我发现,通过处理“mouseup”事件并从该处理程序返回false,可以抑制“click”事件。这在这一点上是没有意义的,但它确实解决了您最初的问题,代价是为“mouseup”事件提供了一个处理程序。