Me gustaría desvanecer un elemento (pasando su opacidad a 0) y luego, cuando termine, eliminar el elemento del DOM.
En jQuery esto es sencillo ya que puede especificar que "Eliminar" suceda después de que se complete una animación. Pero si deseo animar usando transiciones CSS3, ¿hay alguna forma de saber cuándo se ha completado la transición / animación?
Respuestas:
Para las transiciones, puede usar lo siguiente para detectar el final de una transición a través de jQuery:
Mozilla tiene una excelente referencia:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions#Detecting_the_start_and_completion_of_a_transition
Para las animaciones es muy similar:
Tenga en cuenta que puede pasar todas las cadenas de eventos con prefijo del navegador al método bind () simultáneamente para admitir la activación del evento en todos los navegadores que lo admitan.
Actualizar:
Según el comentario dejado por Duck: utiliza el
.one()
método de jQuery para garantizar que el controlador solo se active una vez. Por ejemplo:Actualización 2:
El
bind()
método jQuery ha quedado en desuso yon()
se prefiere el método a partir dejQuery 1.7
.bind()
También puede usar el
off()
método en la función de devolución de llamada para asegurarse de que se disparará solo una vez. Aquí hay un ejemplo que es equivalente a usar elone()
método:Referencias
.off()
.one()
fuente
.on()
lugar de.bind()
jQuery v1.7 + api.jquery.com/bindOtra opción sería usar jQuery Transit Framework para manejar sus transiciones CSS3. Las transiciones / efectos funcionan bien en dispositivos móviles y no tiene que agregar una sola línea de transiciones CSS3 desordenadas en su archivo CSS para realizar los efectos de animación.
Aquí hay un ejemplo que cambiará la opacidad de un elemento a 0 cuando haga clic en él y se eliminará una vez que se complete la transición:
JS Fiddle Demo
fuente
Hay un
animationend
evento que se puede observar, consulte la documentación aquí , también para lastransition
animaciones CSS puede usar eltransitionend
eventoNo hay necesidad de bibliotecas adicionales, todas estas funcionan con vanilla JS
fuente
Para cualquiera que pueda ser útil, aquí hay una función dependiente de jQuery con la que tuve éxito para aplicar una animación CSS a través de una clase CSS, y luego recibir una devolución de llamada después. Puede que no funcione perfectamente ya que lo estaba usando en una aplicación Backbone.js, pero puede ser útil.
Lo usé un poco así
Idea original de http://mikefowler.me/2013/11/18/page-transitions-in-backbone/
Y esto parece útil: http://api.jqueryui.com/addClass/
Actualizar
Después de luchar con el código anterior y otras opciones, sugeriría ser muy cauteloso con cualquier escucha para finalizar la animación CSS. Con múltiples animaciones en curso, esto puede volverse desordenado muy rápido para escuchar eventos. Sugeriría una biblioteca de animación como GSAP para cada animación, incluso las pequeñas.
fuente
e.stopImmediatePropagation(); self.trigger(this.whichAnimationEvent()); //for purge existing event callback.apply(self);
La respuesta aceptada actualmente se dispara dos veces para las animaciones en Chrome. Presumiblemente esto se debe a que reconoce
webkitAnimationEnd
tan bien comoanimationEnd
. Lo siguiente definitivamente solo se disparará una vez:fuente