Pour JavaScript ou jQuery, comment faire en sorte que l’événement transitionend ne se déclenche pas?

Dans le lien:

https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_CSS_transitions

il est dit que:

Remarque: L’événement transitionend ne se déclenche pas si la transition est annulée, car la valeur de la propriété animante est modifiée avant la fin de la transition.

J’ai donc essayé et essayé sur http://jsfiddle.net/HA8s2/32/ et http://jsfiddle.net/HA8s2/33/ en utilisant Chrome et Firefox.

exemple: (cliquez sur la case de gauche ou de droite dans jsfiddle)

$(".foo").click(function(evt) { $(".foo").addClass("hide"); setTimeout(function() { $(".foo").eq(0).removeClass("hide"); }, 3000); }); $(".foo").on("transitionend", function(evt) { console.log("wow! transitionend fired for", evt.target, "at time =", (new Date()).getTime() / 1000); }); 

c’est avec une durée de transition CSS de 6 secondes:

 transition-duration: 6s; 

Mais les deux ont gardé l’animation. En fait, la zone de gauche “s’anime à une nouvelle valeur au milieu de l’animation d’origine”; il a donc fallu 9 secondes à la gauche pour terminer, tandis que la zone de droite a pris 6 secondes.

De plus, Firefox n’a que les deux événements dans http://jsfiddle.net/HA8s2/32/ séparés de 2 secondes au lieu de 3 secondes.

La question qui se pose est la suivante: comment faire en sorte que la transition se termine comme décrit dans la documentation de mozilla.org? (et non par une autre méthode de force brute).

(En d’autres termes, je souhaite connaître toutes les situations dans lesquelles le système de transitionend ne se déclenchera pas et le tester).

Mise à jour: j’ai pu annuler l’animation si j’ajoutais un display: none dans la zone de gauche, comme sur http://jsfiddle.net/HA8s2/34/ et je ne pourrai pas l’annuler si c’est visibility: hidden comme dans http://jsfiddle.net/HA8s2/35/ mais cela ne “change” pas vraiment la valeur de la propriété comme le dit la documentation – il s’agit d’append ou de modifier une autre valeur de propriété.

Ne pourriez-vous pas lui donner une nouvelle classe qui remplace la propriété de transition en la supprimant?

Votre code actuel est comme:

 .myelem { transition: 0.5s all; } 

Vous appendiez ce code:

 .alsothis { transition: none; } 

Lorsque vous appliquez la classe alsothis à votre élément, la nouvelle valeur de propriété de transition remplacera l’autre, supprimant ainsi l’effet d’animation.