Ich habe einige Drag Verhalten definiert, die wie folgt erwartet funktioniert (Code in Coffeescript):Wie kann verhindert werden, dass d3 den Rechtsklick auslöst?
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)
ich jetzt versuchen, benutzerdefinierte Verhalten für Rechtsklicks auf Knoten zu erstellen. Dies löst jedoch "dragstart" und "drag" aus, dh nachdem ichim "contextmenu" -Ereignis aufgerufen habe, bleibt der fragliche Knoten an meinem Mauszeiger und folgt ihm, bis ich einen weiteren (linken) Klick mache, um eine Freigabe zu erzwingen (Ich nehme an, e.preventDefault()
verursacht auch "dragend", nie zu feuern).
Ich fand eine kurze Diskussion dieses Problems in einer thread on Google Groups und einer discussion in d3's issues on Github. Ich kann jedoch aus diesen Kommentaren nicht herausfinden, wie ich dieses Verhalten verhindern kann.
Wie kann ich das Ziehen bei Rechtsklick nicht auslösen?
Im 'dragstart' Event konnten Sie überprüfen, ob die rechte Maustaste angeklickt wurde (mit d3.Ereignis) und wenn nicht, rufen Sie 'force.stop()' auf. –
Wie kann ich überprüfen, welche Maustaste in 'd3.event' angeklickt wurde? Alle Vorschläge, die ich finden kann, wie 'which',' button' und 'keyCode' geben mir' undefined'. Abgesehen davon: Ich rufe 'force.stop()' auf, um den Layoutalgorithmus zu stoppen, während der Benutzer zieht. Wenn Sie es nicht aufrufen, wird die Ziehbewegung nicht verhindert. – notan3xit
Ich denke, 'd3.event' hat ein Mitglied' sourceEvent' oder etwas ähnliches, das Ihnen Zugriff auf das eigentliche Ereignis gibt. Und ja, Sie würden auch etwas wie 'preventDefault()' benötigen. –