我已经定义了一些按预期工作的拖动行为(CoffeeScript 中的代码):
nodeDrag = d3.behavior.drag()
.on("dragstart", (d, i) ->
force.stop())
.on("drag", (d, i) ->
d.px += d3.event.dx
d.py += d3.event.dy
d.x += d3.event.dx
d.y += d3.event.dy
tick())
.on("dragend", (d, i) ->
force.resume()
d.fixed = true
tick())
// ...
nodes = vis.selectAll(".node")
.data(graph.nodes)
.enter()
.append("g")
// ...
.call(nodeDrag)
我现在尝试为节点上的右键单击创建自定义行为。但是,这会触发“dragstart”和“drag”,即在我调用e.preventDefault()
“contextmenu”事件后,有问题的节点会粘在我的鼠标指针上并跟随它,直到我再次(左)单击以强制释放(我假设e.preventDefault()
也会导致“dragend”永远不会触发)。
我在 Google Groups 上的一个线程和Github 上的 d3 问题中的讨论中找到了对这个问题的简短讨论。但是,我无法从这些评论中弄清楚如何防止这种行为。
如何在右键单击时不触发拖动?