Krótka odpowiedź brzmi, że nie ma standardowego sposobu na przejście i nie ma na to ochoty. W tej wersji nie jest obsługiwany.
Trochę dłuższa odpowiedź brzmi: prawdopodobnie zhakujesz ją za pomocą __transition__
. Chodzi o sprawdzenie, czy istnieje __transition__
, a jeśli tak, to poczekaj, aż nie zacznie się przed rozpoczęciem nowego (pod) przejścia.
Aby to zrobić, pomaga przedłużyć prototyp wyboru z odpowiednią funkcję:
d3.selection.prototype.getTransition = function() {
if(this[0][0].__transition__) {
return this[0][0].__transition__[1];
} else return undefined;
}
Zauważ, że to tutaj jest bardzo hacky i będzie tylko praca czy istnieje dokładnie jeden element wybór z dokładnie jednym przejściem. Powinieneś jednak wpaść na pomysł.
Teraz możemy użyć tej funkcji do określenia, czy przejście jest uruchomione.
if(sel.getTransition() !== undefined) {
// transition is there
} else {
// no transition
}
Niestety __transition__
nie pozwalają zrekonstruować obiekt przejściowy, tj dodaje nie będzie działać.
sel.getTransition().transition()...
więc symulować subtransition który rozpoczyna się po aktualnie uruchomiony jeden jest kompletny, należy setTimeout
, by sprawdzić, czy coś działa i tak szybko, jak nic nie jest, rozpocząć nowe przejścia:
function check() {
if(sel.getTransition() !== undefined) {
setTimeout(check, 100);
} else {
sel.transition().duration(1000)...;
}
}
check();
ty może zredukować interwał między kontrolami (tutaj 100ms), aby stworzyć lepsze wrażenie przejścia, które następuje zaraz po poprzednim.
Pełny przykład here. Zauważ, że prawie we wszystkich przypadkach znacznie łatwiej jest zachować odniesienie do obiektu przejściowego i używać go. Ten przykład naprawdę służy jedynie jako hackowaty dowód koncepcji.
Czy możesz określić, czy mówisz o v2 czy v3? – Wex
Powiedziałem wersję 3, ale może powinienem pogrubić to lub coś .. – Chuck
Inspekcja \ _transition_ jest prawdopodobnie najbardziej skutecznym sposobem, aby to zrobić. Właściwość \ _transition_ jest usuwana po zakończeniu przejścia elementu, więc możesz po prostu sprawdzić, czy właściwość \ _transition_ jest obecna. Jeśli tak, to wiesz, że nastąpiło przejście na ten element i możesz sprawdzić \ _transition_, aby uzyskać bardziej szczegółowe informacje. Masz również opcje przechwytywania podelementów elementu przejściowego, takich jak using transition.selectAll(). Można również dodać detektory do każdego elementu w trakcie przejścia za pomocą funkcji transition.each() –