【发布时间】:2019-05-23 11:27:15
【问题描述】:
当我尝试创建一个新的d3.drag() 函数并将其绑定到我的选择时,即使我没有在单击时移动鼠标(dx 和 dy = 0),“拖动”事件也会触发。
当没有“拖动”时,我不想调用点击处理程序。
var drag = d3.drag()
.on('start', dragStart)
.on('drag', dragging)
.on('end', dragEnd);
viewPort.on('click', function () {
clicked = true;
})
.call(drag);
我希望 clicked = true 并且当我在单击时不移动鼠标时“拖动”不会触发。现在 clicked 是真的,但是“drag”也会被触发。
【问题讨论】:
-
就是这样:
mousedown事件将触发 dragstart 事件,根据 API documentation。为了避免这种情况,当 dx 或 dy 不为零时调用处理程序,即通过保护子句或类似的东西。 -
感谢您的回答。 @Terry,所以您的意思是“拖拽”事件中的警卫尝试了这一点,并且像魅力一样工作。我认为“拖动”事件应该只在鼠标移动时触发......
-
@MrDeibl 查看我更新的答案,解释为什么我们不能选择在没有 mousemove 事件的情况下不触发拖动事件:那是因为在注册任何移动之前触发了 mousedown,所以那时我们不知道鼠标是否移动了。
标签: javascript d3.js