2013-01-10 43 views
6

Tôi đang thử mã jQuery sau.
Khi tôi cuộn lên hoặc xuống, tôi muốn fadeOut một div và khi cuộn đã dừng fadeIn cùng một div.Sự kiện cuộn jQuery

Những gì tôi có điều này là:

$(document).ready(function(){ 
    $(window).scroll(function(e){ 
    $('#search_tab').fadeOut('slow'); 
    }); 
}); 

Tôi biết rằng điều này sẽ fadeOut div khi cuộn đã bắt đầu, nhưng thủ đoạn này là mờ dần nó trở lại một khi tôi ngừng di chuyển.

Bây giờ, tôi đã thấy điều này (nhưng vẫn không khá gì tôi muốn)

//Firefox 
$('#elem').bind('DOMMouseScroll', function(e){ 
    if(e.detail > 0) { 
     //scroll down 
     console.log('Down'); 
    }else { 
     //scroll up 
     console.log('Up'); 
    } 

    //prevent page fom scrolling 
    return false; 
}); 

Chức năng trên sẽ không làm việc ở tất cả như sau:

$(window).bind('DOMMouseScroll', function(e){ 
    if(e.detail > 0) { 
     //scroll down 
     $('#search_tab').fadeOut('slow'); 
    }else { 
     //scroll up 
     $('#search_tab').fadeOut('slow'); 
    } 

    //prevent page fom scrolling 
    return false; 
}); 

Trả lời

4

Không có sự kiện nghe scrollstop nhưng bạn có thể mô phỏng một sự kiện bằng cách sử dụng setTimeout() và sau đó xóa timer mỗi khi trang cuộn. Đây là mẫu fiddle.

var timer;  
$(window).scroll(function(e){ 
     clearTimeout(timer); 
     $('#search_tab').fadeOut('slow'); 
     timer = setTimeout(checkStop,150); 
}); 

function checkStop(){ 
    $('#search_tab').fadeIn('slow'); 
} 
+0

nó hoạt động tốt, thx :) – user1965451

2

Bạn có thể kiểm tra trên mỗi khung :

// shim for frame listener 
window.requestAnimFrame = (function(){ 
     return window.requestAnimationFrame  || 
       window.webkitRequestAnimationFrame || 
       window.mozRequestAnimationFrame || 
       window.oRequestAnimationFrame  || 
       window.msRequestAnimationFrame  || 
       function(callback){ 
       window.setTimeout(callback, 1000/60); 
       }; 
    })(); 

    // on every frame, call render() 
    (function animloop(){ 
     requestAnimFrame(animloop); 
     render(); 
    })(); 


var lastScroll = 0, isScrolling = false; 
function render(){ 
    var thisScroll = $(window).scrollTop(); 
    if(lastScroll !== thisScroll){ 
    if(!isScrolling){ 
     // scrolling has started, fade out div 
     $('#search_tab').stop().fadeOut('slow'); 
    } 
    isScrolling = true; 
    }else{ 
    if(isScrolling){ 
     // scrolling has stopped, fade in div 
     $('#search_tab').stop().fadeIn('slow'); 
    } 
    isScrolling = false; 
    } 
    lastScroll = thisScroll; 
} 
+0

tuyệt vời, chỉ cần những gì tôi đang tìm kiếm – user1965451

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