2009-09-14 8 views
40

que tienen un elemento básico div para representar un mensaje que muestro durante unos segundos y luego se desvanecen a cabo utilizando¿Cómo cancelas un jQuery fadeOut() una vez que ha comenzado?

$('#message').fadeOut(5000); 

Quiero ser capaz de cancelar el fundido de salida si el usuario pasa el ratón sobre el div.

¿Cómo puedo cancelar el fundido de salida una vez que el método fadeOut ha comenzado a difuminar el div?

Mi código actual, a continuación, funciona si el mouse entra en el div mientras se muestra, pero necesito permitir que el usuario pase el cursor sobre el div una vez que ha comenzado a desvanecerse.

$('#message').mouseenter(function() { 
    clearTimeout(this.timeout); 
}); 
$('#message').mouseleave(function() { 
    this.timeout = setTimeout("$('#message').fadeOut(5000)", 3000); 
}); 
$('#message').fadeIn(2000, function() { 
    this.timeout = setTimeout("$('#message').fadeOut(3000)", 3000); 
}); 

Respuesta

39
+3

agradable! usando stop, esto vuelve a la normalidad para la función del mouseenter: $ (this) .stop(). animate ({opacity: '100'}); – daddywoodland

+0

¡No puedo creer que no haya visto ese en los documentos de jQuery! Debe ser un lunes. Gracias. –

+1

Específicamente, el combo .stop(). Animate ({opacity: '100'}) de @ daddywoodland es lo que permite que cualquier fadIn/fadeOut se reinicie en función de su activador. Funciona genial. – cbmtrx

18

También, usted puede probar si un elemento se encuentra en medio de una animación usando el selector :animated:

$('#message').mouseover(
    function() { 
     if($(this).is(':animated')) { 
     $(this).stop().animate({opacity:'100'}); 
     } 
    } 
); 
+0

Eso es útil saber, gracias. –

Cuestiones relacionadas