2012-08-14 77 views
2

我想使用一些無限滾動來擺脫我的網站上的分頁。但是,我發現這個滾動函數似乎有一些怪癖。當向上滾動時,它似乎會觸發一次。有沒有辦法在滾動時只觸發滾動事件?而且,如果沒有滾動條,它似乎根本不會觸發,就像跟蹤頁面的移動一樣,而不是按下鼠標滾輪或箭頭或空格鍵。任何良好的滾動檢測功能?事件向下滾動

$(window).scroll(function() { 

    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { 

     //infinite scrolling is the idea 

    } 

}); 

謝謝!

+0

可能重複的[滾動向上/向下jQuery中分辯?](http://stackoverflow.com/questions/4989632/differentiate-between-scroll-up-down-in-jquery) – 2012-08-14 23:39:53

+0

@FelixKling看看接受的答案,我是否會在全球範圍內聲明變量?有一種特殊的方式我應該這樣做?我從來沒有用過一個全局變量,因爲我讀過很多很多次,他們都是黑暗的一面 - 謝謝! – 1252748 2012-08-15 01:54:21

+0

它不一定是全局的,只是可以從'scroll'事件處理程序訪問的地方,例如,如果你在'ready'處理程序中綁定了處理程序,那麼在那裏聲明變量。 – 2012-08-15 02:12:07

回答

4

您所查找的公式是這樣的

document.body.scrollTop >= (document.body.scrollHeight - window.innerHeight - 50) 

這是假設你body元素實際上沒有一套height和它的overflow未設置爲hiddenscroll

雖然只要你在50像素的閾值內,這也可以用於向上滾動。 但是,您可以保存上一個滾動偏移量,並且只會增加一些操作。的

var lastScrollTop = 0; 
$(window).scroll(function(e) { 
    var body = $("body")[0], 
     scrollTop = body.scrollTop; 

    if (scrollTop > lastScrollTop) { 
     if (scrollTop >= (body.scrollHeight - window.innerHeight - 50)) { 
      // do something 
     } 
    } 
    lastScrollTop = scrollTop; 
}); 
+0

啊,優秀。謝謝!我將如何保存以前的滾動偏移量? – 1252748 2012-08-15 00:28:29

+0

看看代碼。它保存到'lastScrollTop'。 – 2012-08-15 05:11:19