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
transition
ytransitionend
son 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
msTransitionend
no 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
one
lugar deon
. ¡Era tan obvio!Si usa jQuery y Bootstrap
$.support.transition.end
devolverá 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
transitionend
no 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