Ich möchte ein Element ausblenden (seine Deckkraft auf 0 umstellen) und dann, wenn Sie fertig sind, das Element aus dem DOM entfernen.
In jQuery ist dies unkompliziert, da Sie das "Entfernen" angeben können, das nach Abschluss einer Animation erfolgen soll. Aber wenn ich mit CSS3-Übergängen animieren möchte, muss ich trotzdem wissen, wann der Übergang / die Animation abgeschlossen ist?
Antworten:
Für Übergänge können Sie Folgendes verwenden, um das Ende eines Übergangs über jQuery zu erkennen:
Mozilla hat eine ausgezeichnete Referenz:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#Detecting_the_start_and_completion_of_a_transition
Für Animationen ist es sehr ähnlich:
Beachten Sie, dass Sie alle Ereigniszeichenfolgen mit Browserpräfix gleichzeitig an die bind () -Methode übergeben können, um das Auslösen des Ereignisses in allen Browsern zu unterstützen, die dies unterstützen.
Aktualisieren:
Gemäß dem Kommentar von Duck: Sie verwenden die
.one()
Methode von jQuery, um sicherzustellen, dass der Handler nur einmal ausgelöst wird. Beispielsweise:Update 2:
Die jQuery-
bind()
Methode ist veraltet, und dieon()
Methode wird ab sofort bevorzugtjQuery 1.7
.bind()
Sie können auch die
off()
Methode für die Rückruffunktion verwenden, um sicherzustellen, dass sie nur einmal ausgelöst wird. Hier ist ein Beispiel, das der Verwendung derone()
Methode entspricht:Verweise:
.off()
.one()
quelle
.on()
eher als.bind()
für jQuery v1.7 + api.jquery.com/bindEine weitere Option wäre die Verwendung des jQuery Transit Framework zu verwenden, um Ihre CSS3-Übergänge zu verarbeiten. Die Übergänge / Effekte funktionieren auf Mobilgeräten gut und Sie müssen Ihrer CSS-Datei keine einzige Zeile unordentlicher CSS3-Übergänge hinzufügen, um die Animationseffekte auszuführen.
Hier ist ein Beispiel, das die Deckkraft eines Elements beim Klicken auf 0 ändert und nach Abschluss des Übergangs entfernt wird:
JS Fiddle Demo
quelle
Es ist ein
animationend
Ereignis , das siehe Dokumentation beobachtet werden kann hier , auch für CSS -transition
Animationen Sie nutzen könntentransitionend
EreignisEs sind keine zusätzlichen Bibliotheken erforderlich, die alle mit Vanilla JS funktionieren
quelle
Für alle, für die dies nützlich sein könnte, ist hier eine jQuery-abhängige Funktion, mit der ich erfolgreich eine CSS-Animation über eine CSS-Klasse angewendet und anschließend einen Rückruf erhalten habe. Es funktioniert möglicherweise nicht perfekt, da ich es in einer Backbone.js-App verwendet habe, aber vielleicht nützlich.
Ich habe es irgendwie so benutzt
Ursprüngliche Idee von http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
Und das scheint praktisch: http://api.jqueryui.com/addClass/
Aktualisieren
Nachdem ich mit dem obigen Code und anderen Optionen zu kämpfen habe, würde ich vorschlagen, sehr vorsichtig zu sein, wenn man auf CSS-Animationen hört. Wenn mehrere Animationen ausgeführt werden, kann dies beim Abhören von Ereignissen sehr schnell chaotisch werden. Ich würde dringend empfehlen, für jede Animation eine Animationsbibliothek wie GSAP zu verwenden, auch für die kleinen.
quelle
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
Die akzeptierte Antwort wird derzeit zweimal für Animationen in Chrome ausgelöst. Vermutlich liegt das daran, dass es
webkitAnimationEnd
ebenso gut erkennt wieanimationEnd
. Folgendes wird definitiv nur einmal ausgelöst:quelle