Ich versuche Mausereignisse zu erhalten, um zwischen verschiedenen Elementen in einem Streudiagramm zusammenzuarbeiten. Die Komponente brush
von D3 fügt dem aufgerufenen Element einige Listener hinzu (z. B. svg.call(brush)
). Ich möchte auch Punkte anzeigen, die an das SVG gebunden sind, ähnlich wie ein Streudiagramm, und für diese Punkte, um mouseover
Ereignisse zu unterstützen (für Tooltips und andere Interaktionen).Getting Point Mausinteraktion und Pinsel zusammenarbeiten
Eine previous solution schlägt vor dem Aufrufen des Pinsels das Zeichnen von Punkten vor, die Mouseover auf Punkten unterstützt, während der Pinsel gezeichnet und der Umfang geändert werden kann. Wenn die Ziehbewegung für den Pinsel jedoch an einem Punkt beginnt (was ich bei sehr dichten Diagrammen erwarte), verhält sich die Pinselkomponente fehlerhaft, wenn bereits ein Extent aktiv ist (beim Umsetzen des Pinsels wird stattdessen die Ausdehnung geändert). Sie können es unter this example ausprobieren, wo die oben vorgeschlagene Lösung implementiert wurde.
Ich habe das Problem verringert, wie das Ereignis brushstart()
Funktion, die in d3 im Innern der d3.svg.brush
Komponente behandelt wird. Hier sehen Sie, wie relevante Variablen aussehen, wenn der Pinsel korrekt arbeitet.
this eventTarget dragging resizing
-------------- ------------------------------------- ---------- ----------
Translating extent brush parent rect.extent true 0
Resizing extent brush parent rect (invisible rects for resizing) false e.g. "e"
Redrawing brush parent rect.background false 0
Dies ist, wie es zur Zeit aussieht, mit der Lösung oben:
this eventTarget dragging resizing
-------------------- -------------- ------------- ---------- ----------------
Translating extent brush parent circle false circle.datum()
Resizing extent brush parent circle false circle.datum()
Redrawing brush parent circle false circle.datum()
Die eigentliche Frage ist: Wie kann ich die Quelle von d3.event.target frisieren die erste Tabelle übereinstimmen? Wenn ich das kann, kann ich das Verhalten bekommen, das ich möchte. Danke für jede Hilfe!
Wenn Sie es verpasst haben, hier ist ein bl.ock dieses Rätsels in Aktion: http://bl.ocks.org/yelper/d38ddf461a0175ebd927946d15140947
Im Falle eines leeren Pinsel auf einem Kreis gestartet man könnte so etwas wie dies gerade tun: http://blockbuilder.org/larsenmtl/2862c433899f63456f5279e4a6281f5e, behebt nicht den Umzug begann jedoch aus einem Kreis. – Mark