2011-02-24 4 views
6

Necesito detener (cancelar) el actual .fadeIn (5000) y comenzar el mismo fadeIn desde el principio, una vez que se hace clic en un botón (de lo contrario, el próximo fadeIn comienza solo después de 5000). ¿Cómo puedo verificar, si div se está desvaneciendo activamente y cómo puede cancelarlo (supongo que podría simplemente ocultar())?Verificar si el elemento está en el estado fadeIn o fadeOut ('acción')

+0

todavía me gustaría una respuesta que no sea '' data '' para pruebas unitarias. –

Respuesta

13

Use .stop(). No necesita probar si se está ejecutando fadeIn; si no lo está, stop no tiene efecto.

Aún así debes ocultarlo. Por lo que sería algo así como:

$('selector').stop(true).hide().fadeIn(5000); 
+1

Muy útil. Gracias por compartir. ¡Produce una sensación mucho mejor que esperar a que la animación se desarrolle! –

0

Se podía utilizar .hide() para evitar que la decoloración y al instante ocultarlo.

Si necesita detectar que se está desvaneciendo sin detener el fundido, se vuelve más complicado.

La manera más fácil de detectarlo sin cambiarlo es usar .data para establecer un valor en el elemento que muestra que actualmente se está desvaneciendo.

Entonces, si su llamada .fade, utilizar una devolución de llamada que elimina ese valor, como este:

element.data('fading', true); 
element.fade(5000, function() { 
    $(this).data('fading', false); 
}); 

A continuación, puede comprobar si se está desvaneciendo actualmente usando:

if(element.data('fading')) 
+1

El problema con solo usar '.hide()' es que en realidad no cancela la animación. Entonces, si OP deseaba ocultarlo, inmediatamente comenzaría un nuevo fadeIn, el nuevo no comenzaría hasta que el anterior finalizara (aunque no pueda verlo). Ejemplo: http://jsfiddle.net/XUyLW/ – user113716

Cuestiones relacionadas