Ich habe eine D3 (v4) Visualisierung mit vielen Formen, die in einigen Fällen innerhalb von etwa drei Sekunden zu neuen Positionen animieren. Diese Formen haben Klick- und Mouseover-Ereignis-Listener, die nur dann aktiv sein sollen, wenn sich der Viz nicht bewegt.Ereignisse in d3 kurzschließen?
Die naive Art, dies zu tun, ist einfach. Ich habe eine boolean Variable is_animating
genannt, den true
gesetzt wird, wenn die Animation beginnt und false
auf dem Rückruf, so dass ich nur diese zu dem Ereignis-Listener hinzugefügt:
shapes.on("click", function(d) {
if (is_animating) {
return;
}
// otherwise, business as usual
})
Das ist in Ordnung, aber ich plane eine Menge hinzufügen Event-Listener zu den Shapes und würden es lieben, wenn es eine elegantere Möglichkeit gäbe, die Ereignisse, die höher im Bubbling sind, abzufangen und dies nur einmal zu tun, anstatt diese Prüfung zu jedem Event hinzuzufügen. Aber ich verstehe nicht ganz d3.event
und wie es sprudelt. Gibt es einen einfachen "Master-Event-Listenet", wenn Sie so wollen, würde das jedes Mal ausgelöst werden, wenn ein Benutzer versucht, etwas zu tun, was das Event kurzschließen könnte, wenn is_animating
wahr ist?
Danke, gut zu wissen! Dies würde immer noch bedeuten, stattdessen alle Zuhörer zu überprüfen, aber sehr nützliche Informationen. –