Foros del Web » Creando para Internet » CSS »

[SOLUCIONADO] Problema con delay de animación CSS

Estas en el tema de Problema con delay de animación CSS en el foro de CSS en Foros del Web. Buen día. La idea es la siguiente: Tenemos 2 cajas sobrepuestas. Cuando se pone el cursor encima de la caja 1 , inmediatamente sale la ...
  #1 (permalink)  
Antiguo 30/01/2014, 16:27
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Problema con delay de animación CSS

Buen día.

La idea es la siguiente:
Tenemos 2 cajas sobrepuestas. Cuando se pone el cursor encima de la caja 1, inmediatamente sale la caja 2. Hasta aquí, todo bien.

El problema está en la vuelta. Cuando se quita el cursor de la caja 1, la caja 2 se regresa inmediatamente sin animación, y 1 seg después se regresa otra vez.

Este segundo que tarda la caja 2 para regresarse otra vez, es el del delay de la animación. La cosa se arregla si se pone este delay en cero. Pero la cosa es que no deseo ponerlo en cero.

Aquí pueden ver el código en acción.

¿Cómo arreglo este extraño en CSS?

Saludos cordiales!

Última edición por berkeleyPunk; 30/01/2014 a las 17:33
  #2 (permalink)  
Antiguo 30/01/2014, 23:37
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Problema con delay de animación CSS

Un error muy común con las animaciones es creer que los valores que le pasamos en un keyframes [enlace eliminado], perduran una vez terminada la animación.

Lo que sucede realmente es que al cambiar el nombre de la animación en javascript el navegador vuelve a consultar el CSS, y ve que el objeto vuelve a estar a translate(0%,0%) ya que has anulado el anterior keyframe que estaba al translate(0%,100%), luego pasado el segundo de delay pasa de 0 a 100 instantáneamente y realiza la animación desde 100 a 0.

Ademas para hacer efectos hover animados se suele utilizar la propiedad transition [enlace eliminado], ya que desde ella es mucho mas fácil controlar efectos hover, y no requieren de javascript externo.

Espero haber sido de ayuda, Saludos!

Última edición por pzin; 31/01/2014 a las 06:52 Razón: Eliminar enlaces por autopromoción
  #3 (permalink)  
Antiguo 31/01/2014, 06:50
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Problema con delay de animación CSS

No le pongas delay, haz que la animación de vuelta dure el doble, y que se empiece a mover a la mitad de la animación: http://jsfiddle.net/a6Juc/1

Cita:
Iniciado por devildrey33 Ver Mensaje
Un error muy común con las animaciones es creer que los valores que le pasamos en un keyframes , perduran una vez terminada la animación.
De hecho con animation-fill-mode: forwards es lo que se suele hacer.
  #4 (permalink)  
Antiguo 31/01/2014, 11:59
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Problema con delay de animación CSS

Yo sigo prefiriendo hacerlo con transition, y como ves no hace falta JavaScript y puedes establecer el delay de 1 segundo al salir del hover : http://jsfiddle.net/a6Juc/3/

Otra cosa, al hacerlo con animation / JavaScript si sales y entras muy rápido con el mouse del objeto, la animación se corta y empieza siempre desde cero, cosa que con el transition no pasa.

Espero que te sirva de ayuda, Saludos.

Última edición por devildrey33; 31/01/2014 a las 12:35
  #5 (permalink)  
Antiguo 01/02/2014, 12:21
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Problema con delay de animación CSS

Gracias por responder devildrey33.

Comentas que:
Cita:
Iniciado por devildrey33 Ver Mensaje
...el objeto vuelve a estar a translate(0%,0%), ya que has anulado el anterior keyframe que estaba al translate(0%,100%)...
Espero puedas abundar un poco más, porque no termino de entender tus indicaciones . ¿En qué momento exactamente el navegador entiende que el objeto vuelve a estar a translateY(0%), cuando, según el CSS (el forwards que comenta pzin), el objeto está en translateY(100%) justo antes de suceder el evento mouseout, o sea, justo antes de quitar el cursor del objeto?

También comentas que la cosa se puede hacer con transiciones. Tienes razón, desgraciadamente, al abrir el post, reduje lo más que pude el código con el que trabajaba, para no molestar al lector con elementos innecesarios que sólo hacen más difícil la lectura. Lo que en el fondo quería hacer, y por eso utilizaba javascript, era algo un poquillo más complejo. Tenía en mente hacer un menú cuyas opciones salieran escalonadas. O sea, inmediatamente la 1ra opción, medio segundo después la 2da opción y así sucesivamente. Y lo mismo de regreso. Hasta donde veo, no se puede hacer eso sólo con puras transiciones (¿o sí?). Ver ejemplo aquí, en donde la ida se ve bien, pero la vuelta no.

Igualmente, gracias por responder, maestro pzin. Como casi siempre, nada más que decir, asunto arreglado.

Saludos cordiales!

Última edición por berkeleyPunk; 01/02/2014 a las 13:35
  #6 (permalink)  
Antiguo 01/02/2014, 16:04
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: Problema con delay de animación CSS

Hace un tiempo alguien pidió ayuda en el foro para un menú que se desplegaba, no recuerdo el problema exactamente, pero le ayudé y le mostré la solución en un codepen que le hice, ahí ves que se puede hacer algo parecido a lo que dices usando transiciones.
  #7 (permalink)  
Antiguo 01/02/2014, 18:33
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Problema con delay de animación CSS

Cita:
Iniciado por pzin Ver Mensaje
Hace un tiempo alguien pidió ayuda en el foro para un menú que se desplegaba... le ayudé y le mostré la solución...
Ese menú del CodePen se ve increíble. Voy a estudiarlo para ver cómo se hace tal cosa .

Gracias, y, seguramente, hasta pronto!

Etiquetas: javascript
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:11.