2013-07-16 4 views
6

Ich verwende das Force-Layout von D3, um ein Netzwerkdiagramm zu organisieren, und alles funktioniert reibungslos.Wie kann ich feststellen, wenn ein D3 Force-Layout gestoppt wurde?

Ich möchte jedoch eine Schaltfläche zu meiner Benutzeroberfläche hinzufügen, so dass der Benutzer den Layout-Prozess nach Belieben abspielen/pausieren kann: Ich hätte gerne eine Schaltfläche, die den aktuellen Status des Layouts widerspiegelt: ob es sich um Computer handelt oder nicht (d3 stoppt automatisch, wenn sich das Layout stabilisiert hat). Gibt es eine Möglichkeit zu sagen, wann das Force-Layout-Computing beendet und gestartet wurde? Ich habe erwartet, dass eine Art von Veranstaltung damit fertig wird, aber ich konnte keine finden.

Antwort

1

Es gibt nicht wirklich eine Vorstellung davon, das Layout "gestoppt" zu haben. Selbst wenn es aussieht, als wäre es stationär, könnten sich immer noch winzige Veränderungen ergeben. Sie können den Wert alpha überprüfen und ihn als angehalten interpretieren, wenn er unter einen Schwellenwert fällt. In diesem Fall können Sie einen negativen Wert festlegen, der das Layout explizit stoppt. Es gibt kein bestimmtes Ereignis dafür, aber Sie können Ihre Bedingung in der tick Ereignisbehandlungsroutine überprüfen.

+1

Hallo, Lars. Der Listener 'end' ist seit v2.8.0 verfügbar. (rel Feb 24 2012). jsFiddle: http://jsfiddle.net/zschuessler/gRqv3/ –

+0

Guter Fang! Es könnte auch noch sicherer sein, Alpha zu überprüfen, da es sehr lange dauert, bis es wirklich Null ist. –

9

Verwenden Sie das Ereignis end dokumentiert auf der wiki.

d3.layout.force() 
    .on('end', function() { console.log('ended!'); }); 

jsFiddle: http://jsfiddle.net/zschuessler/gRqv3/ | Konsole anzeigen, um Listener in Aktion zu sehen