次のように期待どおりに動作するドラッグ動作をいくつか定義しました (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()
」が発火しない原因になると思います)。
Google グループのスレッドでこの問題に関する簡単な議論を見つけ、Githubの d3 の問題で議論を見つけました。ただし、これらのコメントから、この動作を防ぐ方法を理解できません。
右クリックでドラッグをトリガーしないようにするにはどうすればよいですか?