Je voudrais effacer un élément (en faisant passer son opacité à 0), puis une fois terminé, supprimez l'élément du DOM.
Dans jQuery, cela est simple car vous pouvez spécifier que la «suppression» doit se produire après la fin d'une animation. Mais si je souhaite animer en utilisant des transitions CSS3, est-il possible de savoir quand la transition / animation est terminée?
Réponses:
Pour les transitions, vous pouvez utiliser les éléments suivants 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 simultanément toutes les chaînes d'événements préfixées du navigateur dans la méthode bind () pour prendre en charge le déclenchement de l'événement sur tous les navigateurs qui le prennent en charge.
Mettre à jour:
Selon le commentaire laissé par Duck: vous utilisez la
.one()
méthode de jQuery pour vous assurer que le gestionnaire ne se déclenche qu'une seule fois. Par exemple:Mise à jour 2:
La
bind()
méthode jQuery est obsolète et laon()
méthode est préférée à partir dejQuery 1.7
.bind()
Vous pouvez également utiliser la
off()
méthode sur la fonction de rappel pour vous assurer qu'elle ne sera déclenchée qu'une seule fois. Voici un exemple qui équivaut à utiliser laone()
méthode:Références:
.off()
.one()
la source
.on()
plutôt que.bind()
pour jQuery v1.7 + api.jquery.com/bindUne autre option consisterait à utiliser jQuery Transit Framework pour gérer vos transitions CSS3. Les transitions / effets fonctionnent bien sur les appareils mobiles et vous n'avez pas à ajouter une seule ligne de transitions CSS3 désordonnées dans votre fichier CSS pour effectuer les effets d'animation.
Voici un exemple qui passera l'opacité d'un élément à 0 lorsque vous cliquerez dessus et sera supprimé une fois la transition terminée:
JS Fiddle Demo
la source
Il y a un
animationend
événement qui peut être observé voir la documentation ici , aussi pour lestransition
animations css vous pouvez utiliser letransitionend
événementIl n'y a pas besoin de bibliothèques supplémentaires qui fonctionnent toutes avec vanilla JS
la source
Pour tous ceux qui pourraient être utiles, voici une fonction dépendante de jQuery avec laquelle j'ai réussi à appliquer une animation CSS via une classe CSS, puis à obtenir un rappel par la suite. Cela peut ne pas fonctionner parfaitement depuis que je l'ai utilisé dans une application Backbone.js, mais peut-être utile.
Je l'ai utilisé un peu comme ça
Idée originale de http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
Et cela semble pratique: http://api.jqueryui.com/addClass/
Mettre à jour
Après avoir lutté avec le code ci-dessus et d'autres options, je suggère d'être très prudent avec toute écoute des fins d'animation CSS. Avec plusieurs animations en cours, cela peut devenir très rapidement désordonné pour l'écoute des événements. Je suggère fortement une bibliothèque d'animation comme GSAP pour chaque animation, même les plus petites.
la source
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
La réponse acceptée se déclenche actuellement deux fois pour les animations dans Chrome. Vraisemblablement, c'est parce qu'il reconnaît
webkitAnimationEnd
aussi bien queanimationEnd
. Les éléments suivants ne se déclencheront certainement qu'une seule fois:la source