2012-10-30 16 views
10

Mam (raczej proste) pytanie: Jak "un-call" force.drag na wybór dokonany przez D3.js? Załóżmy, że stworzyłem zestaw elementów i wywołałem na nim "call", nadając mu funkcję "przeciągnij-oddzwanianie" układu ukierunkowanego na siłę. Wyglądało to tak:D3.js: Usuń force.drag z zaznaczenia

d3.selectAll('rect').call(force.drag); 

Teraz będzie możliwe usunięcie tego zachowania z niektórych węzłów później. Moje podejście polegało na resetowaniu różnych słuchaczy, takich jak "kliknięcie", "przeciąganie" itp. Przy użyciu jednej z nich. Żadna z nich nie zadziałała. Czy ktoś wie, jak usunąć wywołanie zwrotne?

Odpowiedz

19

Jesteś blisko. Zdarzenie przeciągania jest inicjowane przez zdarzenie mousedown z przestrzenią nazw o nazwie drag. Zobacz: https://github.com/mbostock/d3/blob/master/src/behavior/drag.js#L5

Tak, aby usunąć to można zrobić:

d3.select('rect#no-drag').on('mousedown.drag', null); 
+0

To doskonale rozwiązuje, po prostu próbowałem i działa :) Czy domyślnie są wyświetlane nazwy wydarzeń w D3.js? – user654123

+0

Tak. Również jeśli dodasz własne detektory zdarzeń, może mieć sens ich przestrzeń nazw. Umożliwiają korzystanie z wielu słuchaczy, którzy słuchają tego samego wydarzenia. – nautat

+0

Ok, byłem już zaznajomiony z eventpaced zdarzeń z rozwoju wtyczek jQuery. Wydaje się, że D3.js umożliwia zarejestrowanie tylko jednego wywołania zwrotnego dla każdego kwalifikowanego zdarzenia, dlatego ma sens, aby je nazwać. Dzięki jeszcze raz. – user654123

1

Linia ta jakoś nie jest mobilny kompatybilny (chrom/Android)

d3.select('rect#no-drag').on('mousedown.drag', null); 
2

To pytanie nie jest pytaniem, jak Mam drobnoziarnistą kontrolę nad elementem przeciągania, ale przyszedłem tutaj, szukając sposobu na włączanie/wyłączanie przeciągania w zależności od warunków, a osoba pytająca zapytała także, jak odzyskać opór po usunięciu go w komentarzach.

Dlatego dla każdego, kto szuka warunkowego zezwolenia na zdarzenie przeciągania, należy użyć drag.filter.

drag.filter przyjmuje wywołanie zwrotne, które wymaga zwrócenia wartości logicznej. Jeśli wywołanie zwrotne zwróci wartość true, nastąpi przeciągnięcie, w przeciwnym razie przeciągnięcie nie zostanie wywołane.

Jest to znacznie czystsze niż usunięcie przeciągania z zaznaczenia, a następnie próba ponownego zastosowania.

+0

Jesteś spóźniony do gry, ale twój komentarz jest bardzo doceniany, dzięki! – user654123