2009-09-14 10 views
40

Ho un elemento fondamentale div per rappresentare un messaggio che mi mostra per alcuni secondi e poi svanire fuori usandoCome si cancella un jQuery fadeOut() una volta iniziato?

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

Voglio essere in grado di annullare il fade out se l'utente passa il mouse sopra il div.

Come annullare la dissolvenza in uscita una volta che il metodo fadeOut ha iniziato a sbiadire il div?

Il mio codice esistente, di seguito, funziona se il mouse entra nel div mentre viene mostrato, ma è necessario consentire se l'utente passa sopra il div dopo che ha iniziato a svanire.

$('#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); 
}); 

risposta

39
+3

bello! usando stop, questo torna alla normalità per la funzione mouseenter: $ (this) .stop(). animate ({opacity: '100'}); – daddywoodland

+0

Non posso credere di non aver individuato quello nella documentazione di jQuery! Deve essere un lunedì. Grazie. –

+1

In particolare, combo di @ daddywoodland .stop(). Animate ({opacity: '100'}) è ciò che consente a qualsiasi fadIn/fadeOut di riavviarsi in base al trigger. Funziona alla grande. – cbmtrx

18

Inoltre, è possibile verificare se un elemento è nel bel mezzo di un'animazione mediante il selettore :animated:

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

È utile sapere, grazie. –