Chciałbym wyciszyć element (zmieniając jego krycie na 0), a następnie po zakończeniu usuń element z DOM.
W jQuery jest to proste, ponieważ można określić opcję „Usuń”, która ma się odbywać po zakończeniu animacji. Ale jeśli chcę animować za pomocą przejść CSS3, czy mogę wiedzieć, kiedy przejście / animacja została zakończona?
Odpowiedzi:
W przypadku przejść możesz użyć następującego polecenia do wykrycia końca przejścia za pomocą jQuery:
Mozilla ma doskonałe referencje:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#Detecting_the_start_and_completion_of_a_transition
W przypadku animacji jest bardzo podobny:
Zauważ, że możesz przekazać wszystkie ciągi zdarzeń poprzedzone przeglądarką do metody bind () jednocześnie, aby obsługiwać uruchamianie zdarzeń we wszystkich przeglądarkach, które je obsługują.
Aktualizacja:
Zgodnie z komentarzem pozostawionym przez Ducka: używasz
.one()
metody jQuery, aby mieć pewność, że program obsługi odpali tylko raz. Na przykład:Aktualizacja 2:
bind()
Metoda jQuery jest przestarzała, aon()
metoda jest preferowana od dniajQuery 1.7
.bind()
Możesz także użyć
off()
metody w funkcji wywołania zwrotnego, aby mieć pewność, że zostanie ona uruchomiona tylko raz. Oto przykład równoważny z użyciemone()
metody:Bibliografia:
.off()
.one()
źródło
.on()
zamiast.bind()
jQuery v1.7Inną opcją byłoby użycie jQuery Transit Framework do obsługi przejść CSS3. Przejścia / efekty działają dobrze na urządzeniach mobilnych i nie musisz dodawać ani jednego wiersza niechlujnych przejść CSS3 w pliku CSS, aby wykonać efekty animacji.
Oto przykład, który zmieni krycie elementu na 0 po kliknięciu i zostanie usunięty po zakończeniu przejścia:
JS Fiddle Demo
źródło
Jest to
animationend
wydarzenie, które można zaobserwować w dokumentacji zobaczyć tutaj , również dla CSStransition
animacji można użyćtransitionend
zdarzeniaNie ma potrzeby stosowania dodatkowych bibliotek, które działają z waniliowym JS
źródło
Dla każdego, dla kogo może się to przydać, oto funkcja zależna od jQuery, z którą udało mi się zastosować animację CSS za pośrednictwem klasy CSS, a następnie uzyskać oddzwonienie. Może nie działać idealnie, ponieważ miałem go w aplikacji Backbone.js, ale może być użyteczny.
Użyłem tego w ten sposób
Oryginalny pomysł z http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
I wydaje się to przydatne: http://api.jqueryui.com/addClass/
Aktualizacja
Po zmaganiu się z powyższym kodem i innymi opcjami sugerowałbym bardzo ostrożność przy każdym zakończeniu odsłuchu animacji CSS. Przy wielu animacjach może to bardzo szybko zepsuć się podczas słuchania wydarzeń. Zdecydowanie polecam bibliotekę animacji, taką jak GSAP, dla każdej animacji, nawet tej małej.
źródło
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
Akceptowana odpowiedź jest obecnie uruchamiana dwukrotnie dla animacji w Chrome. Przypuszczalnie dzieje się tak, ponieważ rozpoznaje
webkitAnimationEnd
równieżanimationEnd
. Następujące elementy z pewnością wystrzelą tylko raz:źródło