L'événement de fin de transition de Webkit est appelé webkitTransitionEnd, Firefox est transitionEnd, l'opéra est oTransitionEnd. Quel est le bon moyen de les aborder tous en pur JS? Dois-je faire du reniflement du navigateur? ou mettre en œuvre chacun séparément? Une autre façon qui ne m'est pas venue à l'esprit?
c'est à dire:
//doing browser sniffing
var transitionend = (isSafari) ? "webkitTransitionEnd" : (isFirefox) ? "transitionEnd" : (isOpera) ? "oTransitionEnd";
element.addEventListener(transitionend, function(){
//do whatever
},false);
ou
// Assigning an event listener per browser
element.addEventListener("webkitTransitionEnd", fn);
element.addEventListener("oTransitionEnd", fn);
element.addEventListener("transitionEnd", fn);
function fn() {
//do whatever
}
javascript
css
css-transitions
dom-events
méthode d'action
la source
la source
Réponses:
Il existe une technique utilisée dans Modernizr, améliorée:
Ensuite, vous pouvez simplement appeler cette fonction chaque fois que vous avez besoin de l'événement de fin de transition:
la source
transition
ettransitionend
suffisent. Voir: caniuse.com/#search=transitionsundefined
?Selon le commentaire de Matijs, le moyen le plus simple de détecter les événements de transition est d'utiliser une bibliothèque, jquery dans ce cas:
En javascript sans bibliothèque, cela devient un peu verbeux:
la source
msTransitionend
n'est pas nécessaire ici.Mettre à jour
Ce qui suit est une façon plus propre de le faire, et ne nécessite pas de modernisation
Alternativement
Ceci est basé sur le code suggéré par Modernizr, mais avec l'événement supplémentaire pour les nouvelles versions d'Opera.
http://modernizr.com/docs/#prefixed
la source
one
placeon
. C'était tellement évident!Si vous utilisez jQuery et Bootstrap
$.support.transition.end
renverra le bon événement pour le navigateur actuel.Il est défini dans Bootstrap et utilisé dans ses rappels d'animation , bien que la documentation jQuery dise de ne pas se fier à ces propriétés:
la source
À partir de 2015, ce one-liner devrait faire l'affaire (IE 10+, Chrome 1+, Safari 3.2+, FF 4+ et Opera 12 +): -
Joindre l'écouteur d'événements est simple: -
la source
transitionend
n'est pas du tout pris en charge:var transEndEventName = ('WebkitTransition' in document.documentElement.style) ? 'webkitTransitionEnd' : ('transitionend' in document.documentElement.style) ? 'transitionend' : false;
Et puis faites une simple vérification:if(transEndEventName) element.addEventlistener(transEndEventName, theFunctionToInvoke)
La seconde est la voie à suivre. Un seul de ces événements se déclenchera dans chaque navigateur, vous pouvez donc tous les définir et cela fonctionnera.
la source
Voici une manière plus propre
la source
la fermeture de Google s'assure que vous n'avez pas à faire cela. Si vous avez un élément:
en regardant la source de goog.events.eventtype.js, TRANSITIONEND est calculé en regardant l'agent utilisateur:
la source
J'utilise un code comme celui-ci (avec jQuery)
Cela me permet d'utiliser JS pour ajouter des éléments en spécifiant vP concatenté avec la propriété, et s'il n'a pas touché un navigateur, il utilise simplement le standard. Les événements me permettent de lier facilement comme ceci:
la source
object.bind('transitionend oTransitionEnd webkitTransitionEnd', function() { // callback } );
transitionend
, pasTransitionEnd
.remplacement jquery:
et utilisation comme:
la source
La réponse acceptée est correcte, mais vous n'avez pas à recréer cet élément encore et encore et ...
Construisez une variable globale et ajoutez la (les) fonction (s):
la source