Rappel lorsqu'CSS3 transition finitions
J'aimerais fade out un élément (la transition de son opacité à 0), puis lorsque vous avez terminé de supprimer l'élément du DOM.
En jQuery c'est simple puisque vous pouvez spécifier le "Supprimer" à se produire après une animation est terminée. Mais si je veux l'animer à l'aide de transitions CSS3 est-il de toute façon à savoir quand la transition/animation terminée?
- devrait être similaire à ceci: stackoverflow.com/questions/6186454/...
- Dupliquer: stackoverflow.com/questions/2087510/callback-on-css-transition
Vous devez vous connecter pour publier un commentaire.
Pour les transitions, vous pouvez utiliser les méthodes suivantes pour détecter la fin d'une transition via jQuery:
Mozilla a une excellente référence:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#Detecting_the_start_and_completion_of_a_transition
Pour les animations, c'est très similaire:
Notez que vous pouvez passer tous les navigateur préfixé cas des chaînes dans la méthode bind() simultanément à l'appui de l'événement tir sur tous les navigateurs qui le supportent.
Mise à jour:
Par le commentaire laissé par le Canard: vous utilisez jQuery
.one()
méthode pour s'assurer que le gestionnaire ne se déclenche qu'une fois. Par exemple:Mise à jour 2:
jQuery
bind()
méthode a été abandonné, eton()
méthode est préférable car dejQuery 1.7
.bind()
Vous pouvez également utiliser
off()
méthode sur la fonction de rappel pour s'assurer qu'il sera déclenché qu'une seule fois. Voici un exemple qui est équivalent à l'utilisation deone()
méthode:Références:
.off()
.un()
.on()
plutôt que.bind()
pour jQuery v1.7+ api.jquery.com/bind.one()
au lieu de.on()
ou.bind()
. Cela permettra d'assurer qu'il ne peut exécuter une seule fois, et ensuite il va les séparer lui-même à partir du gestionnaire d'événement.animation
de transition Jsfiddleone()
parce que vous n'avez pas à construire un autre objet jQuery avec$(this)
il suffit de supprimer la liaison dans le gestionnaire d'événements. Il semble juste plus propre.animationend
gestionnaire. Le code à exécuter après la fin de l'animation est tout simplement en file d'attente sur la promesse avecthen()
Une autre option serait d'utiliser la jQuery Cadre de Transit pour gérer vos transitions CSS3. Les transitions/effets bien sur des appareils mobiles et vous n'avez pas à ajouter une seule ligne de désordre CSS3 transitions dans votre fichier CSS afin de faire des effets d'animation.
Voici un exemple de transition d'un élément d'opacité à 0 lorsque vous cliquez sur, et sera supprimé une fois la transition achevée:
JS Fiddle Démo
Pour quelqu'un que cela peut être pratique pour, voici un jQuery dépendant de la fonction que j'ai eu du succès avec l'application d'une CSS animation via une classe CSS, puis l'obtention d'un rappel de la suite. Il peut ne pas fonctionne parfaitement depuis que je l'avais utilisé dans un Backbone.js App, mais peut-être utile.
Je l'ai utilisé un peu comme ce
Idée originale de http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
Et cela semble à portée de main: http://api.jqueryui.com/addClass/
Mise à jour
Après avoir lutté avec le code ci-dessus et d'autres options, je vous suggère d'être très prudent avec n'importe quel écoute pour CSS fin de l'animation. Avec de multiples animations en cours, cela peut déraper très vite pour des événements à l'écoute. Je suggère fortement une animation de la bibliothèque comme GSAP pour chaque animation, même les plus modestes.
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
Accepté la réponse se déclenche deux fois pour les animations en Chrome. Sans doute c'est parce qu'il reconnaît
webkitAnimationEnd
ainsi queanimationEnd
. La liste suivante sera certainement uniquement se déclenche une seule fois:Il y a un
animationend
Événement qui peut être observée voir la documentation ici,aussi pour css
transition
animations, vous pouvez utiliser lestransitionend
ÉvénementJS:
CSS:
HTML: