2012-06-29 33 views
24

Đây là một chức năng trượt jQuery tôi đã áp dụng cho một div trên di chuột để trượt một nút xuống.Nếu di chuột qua trong hơn 2 giây thì hiển thị không?

Nó hoạt động tốt ngoại trừ việc bây giờ mỗi khi có ai đó di chuyển vào và ra khỏi nó, nó liên tục nhấp nhô lên xuống.

Tôi đã tìm ra nếu tôi đặt bộ hẹn giờ trễ một hoặc hai giây vào nó thì sẽ có ý nghĩa hơn.

Làm cách nào để sửa đổi chức năng để chỉ chạy trang trình bày nếu người dùng ở trên div trong hơn một hoặc hai giây?

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js "></script> 
<script type="text/javascript"> 

$("#NewsStrip").hover(
function() { 
    $("#SeeAllEvents").slideDown('slow'); }, 
function() { 
    $("#SeeAllEvents").slideUp('slow'); 
}); 

</script> 
+0

Bản sao y của [ jQuery - Cách yêu cầu .hover() đợi?] (http://stackoverflow.com/questions/1089246/jquery-how-to-tell-hover-to-wait) –

+0

@TJCrowder nếu bạn đọc câu hỏi sau đó OP không hỏi chính xác điều đó. –

+0

@ThomasClayson: Rõ ràng là vậy. Cùng một câu hỏi, cùng một câu trả lời được chấp nhận. –

Trả lời

55

Bạn cần phải thiết lập một bộ đếm thời gian trên mouseover và xóa nó hoặc khi trượt được kích hoạt hoặc khi di chuột ra, nào xảy ra trước:

var timeoutId; 
$("#NewsStrip").hover(function() { 
    if (!timeoutId) { 
     timeoutId = window.setTimeout(function() { 
      timeoutId = null; // EDIT: added this line 
      $("#SeeAllEvents").slideDown('slow'); 
     }, 2000); 
    } 
}, 
function() { 
    if (timeoutId) { 
     window.clearTimeout(timeoutId); 
     timeoutId = null; 
    } 
    else { 
     $("#SeeAllEvents").slideUp('slow'); 
    } 
}); 

See it in action.

+0

@xDazz Cảm ơn jon và xDazz. Các slide xuống hoạt động đẹp nhưng nó không trượt trở lại lên trên chuột ra? Tôi có bị thiếu hoặc làm điều gì sai? – user1266515

+0

Hãy thử loại bỏ các khối 'if'' else' trong hàm thứ hai. Bạn không thực sự cần chúng. Gọi những phương thức như vậy sẽ không có bất kỳ tác động bất lợi nào nếu bạn xóa 'if else'. Và nó có lẽ là lý do tại sao nó không trượt lên một lần nữa. :) –

+0

@ThomasClayson Bây giờ nó trượt xuống và lên chỉ một lần và sau đó đi không hoạt động.Chú ý – user1266515

3
var time_id; 

$("#NewsStrip").hover(
function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideDown('slow'); 
    }, 2000); 
}, function() { 
    if (time_id) { 
     clearTimeout(time_id); 
    } 
    time_id = setTimeout(function() { 
     $("#SeeAllEvents").stop(true, true).slideUp('slow'); 
    }, 2000); 
}); 
Các vấn đề liên quan