2009-09-14 35 views
40

Tôi có một phần tử div cơ bản để đại diện cho một thông điệp rằng tôi chỉ trong vài giây và sau đó mờ dần nó ra sử dụngLàm thế nào để bạn hủy bỏ một jQuery fadeOut() một khi nó đã bắt đầu?

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

Tôi muốn để có thể hủy phai ra nếu người dùng di chuyển chuột lên các div.

Làm cách nào tôi có thể hủy bỏ mờ dần khi phương pháp fadeOut đã bắt đầu mờ dần div?

Mã hiện tại của tôi, bên dưới, hoạt động nếu chuột nhập div trong khi nó đang được hiển thị nhưng tôi cần cho phép nếu người dùng di chuột qua div khi nó đã bắt đầu mờ dần.

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

Trả lời

39

Kiểm tra điểm dừng chức năng

http://docs.jquery.com/Effects/stop#clearQueuegotoEnd

+3

tốt đẹp! sử dụng điểm dừng, điều này sẽ trở lại bình thường đối với chức năng mouseenter: $ (this) .stop(). animate ({opacity: '100'}); – daddywoodland

+0

Tôi không thể tin rằng tôi đã không phát hiện ra điều đó trong tài liệu jQuery! Nó phải là một thứ hai. Cảm ơn. –

+1

Cụ thể, combo của @ daddywoodland .stop() animate ({opacity: '100'}) là thứ cho phép bất kỳ fadIn/fadeOut nào khởi động lại dựa trên trigger của bạn. Hoạt động tuyệt vời. – cbmtrx

18

Ngoài ra, bạn có thể kiểm tra nếu một phần tử ở giữa của một hình ảnh động bằng cách sử dụng selector :animated:

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

Đó là tiện dụng để biết, cảm ơn. –

Các vấn đề liên quan