El evento final de transición de Webkit se llama webkitTransitionEnd, Firefox es transitionEnd, opera es oTransitionEnd. ¿Cuál es una buena forma de abordarlos todos en JS puro? ¿Debería rastrear el navegador? o implementar cada uno por separado? ¿De alguna otra forma que no se me haya ocurrido?
es decir:
//doing browser sniffing
var transitionend = (isSafari) ? "webkitTransitionEnd" : (isFirefox) ? "transitionEnd" : (isOpera) ? "oTransitionEnd";
element.addEventListener(transitionend, function(){
  //do whatever
},false);
o
// 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
                                
                    
                    
                        metodofaccion
fuente
                
                fuente

Respuestas:
Hay una técnica utilizada en Modernizr, mejorada:
Entonces puede llamar a esta función siempre que necesite el evento de finalización de la transición:
fuente
transitionytransitionendson suficientes. Ver: caniuse.com/#search=transitionsundefined?Según el comentario de Matijs, la forma más fácil de detectar eventos de transición es con una biblioteca, jquery en este caso:
En javascript sin biblioteca, se vuelve un poco detallado:
fuente
msTransitionendno es necesario aquí.Actualizar
La siguiente es una forma más limpia de hacerlo y no requiere modernización
Alternativamente
Esto se basa en el código sugerido por Modernizr, pero con el evento adicional para las versiones más nuevas de Opera.
http://modernizr.com/docs/#prefixed
fuente
onelugar deon. ¡Era tan obvio!Si usa jQuery y Bootstrap
$.support.transition.enddevolverá el evento correcto para el navegador actual.Se define en Bootstrap y se usa en sus devoluciones de llamada de animación , aunque los documentos de jQuery dicen que no se debe confiar en estas propiedades:
fuente
A partir de 2015, este one-liner debería hacer el trato (IE 10+, Chrome 1+, Safari 3.2+, FF 4+ y Opera 12 +): -
Adjuntar el detector de eventos es simple: -
fuente
transitionendno es compatible en absoluto:var transEndEventName = ('WebkitTransition' in document.documentElement.style) ? 'webkitTransitionEnd' : ('transitionend' in document.documentElement.style) ? 'transitionend' : false;Y luego haga una verificación simple:if(transEndEventName) element.addEventlistener(transEndEventName, theFunctionToInvoke)El segundo es el camino a seguir. Solo uno de esos eventos se activará en cada navegador, por lo que puede configurarlos todos y funcionará.
fuente
Aquí hay una forma más limpia
fuente
El cierre de Google se asegura de que no tengas que hacer esto. Si tienes un elemento:
mirando la fuente de goog.events.eventtype.js, TRANSITIONEND se calcula mirando el useragent:
fuente
Yo uso un código como este (con jQuery)
Eso me permite usar JS para agregar cosas especificando vP concatentado con la propiedad, y si no llegó a un navegador, solo usa el estándar. Los eventos me permiten unirme fácilmente así:
fuente
object.bind('transitionend oTransitionEnd webkitTransitionEnd', function() { // callback } );transitionend, noTransitionEnd.anulación de jquery:
y uso como:
fuente
La respuesta aceptada es correcta, pero no tiene que volver a crear ese elemento una y otra vez y ...
Cree una variable global y agregue la (s) función (es):
fuente