2009-09-14 10 views
40

Mam podstawowy element div do reprezentowania komunikat, że pokażę się na kilka sekund, a następnie znikają go używającJak anulować fadeOut() jQuery, gdy już się zacznie?

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

Chcę być w stanie anulować zanikają, gdy użytkownik najedzie ich myszy nad div.

Jak mogę anulować zaniknięcie , gdy metoda fadeOut zaczęła znikać z div?

Mój istniejący kod, poniżej, działa, gdy mysz wchodzi div podczas gdy jest on wyświetlany, ale muszę pozwolić, jeśli użytkownik unosi się nad div, gdy zaczął się zanikać.

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

Odpowiedz

39
+3

Nice! używając stopu, przywraca to normalne działanie dla funkcji mouseenter: $ (this) .stop(). animate ({krycie: '100'}); – daddywoodland

+0

Nie mogę uwierzyć, że nie zauważyłem tego w dokumentach jQuery! To musi być poniedziałek. Dzięki. –

+1

Konkretnie, combo @ daddywoodland's .stop(). Animate ({krycie: '100'}) pozwala każdemu fadIn/fadeOut na ponowne uruchomienie w oparciu o twój wyzwalacz. Działa świetnie. – cbmtrx

18

Ponadto, można sprawdzić, czy element jest w środku animacji za pomocą przełącznika :animated:

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

To przydatna wiadomość, dzięki. –

Powiązane problemy