2011-04-29 39 views
34

我有一個div溢出:滾動。如何使用JQuery檢查div是否一直滾動到底部?

我想知道它是否一直向下滾動。如何使用JQuery?

這一個不工作:How can I determine if a div is scrolled to the bottom?

+2

發現這個通過使用谷歌搜索,很有意思http://yelotofu.com/2008/10/jquery-how-to-tell-if-youre-scroll-to-bottom/ – 2011-04-29 05:39:34

+0

你能解釋一下什麼發生在你提供的鏈接不起作用的地方?也許會添加一些標記呢? – 2011-04-29 05:48:00

回答

65

這裏是正確的解決方案(jsfiddle)。代碼簡述:

$(document).ready(function() { 
    $('div').bind('scroll', chk_scroll); 
}); 

function chk_scroll(e) { 
    var elem = $(e.currentTarget); 
    if (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight()) { 
     console.log("bottom"); 
    } 
} 

有關更多信息,請參見this

+8

這是一個令人討厭的'alert()'演示:http://jsfiddle.net/Blender/aBc3h/7/ – Blender 2011-04-29 05:51:05

+2

感謝@blender – samccone 2011-04-29 05:56:04

+0

這是一個很好的解決方案。我正在研究一個解決方案,其中包含內容的div可以調整大小,並且我需要在每次調整div大小時重新檢查滾動狀態,因爲它不會每次都觸發。是否有這樣的事件? – SoonDead 2012-05-22 15:19:02

4

你可以做到這一點的

(scrollHeight - scrollTop()) == outerHeight() 

申請所需的jQuery語法,當然...

0

下面是代碼:

$("#div_Id").scroll(function (e) { 
    e.preventDefault(); 
    var elem = $(this);    
    if (elem.scrollTop() > 0 && 
      (elem[0].scrollHeight - elem.scrollTop() == elem.outerHeight())) { 
     alert("At the bottom"); 
    } 
}); 
1

Since 2012火狐包含scrollTopMax財產。如果scrollTop === scrollTopMax您位於元素的底部。

+0

有趣的是,雖然不被任何瀏覽器支持(並且看起來不會像以前那樣?) – 2015-08-29 05:55:48

11
function isScrolledToBottom(el) { 
    var $el = $(el); 
    return el.scrollHeight - $el.scrollTop() - $el.outerHeight() < 1; 
} 

這是@ samccone的答案的變體,它結合了@ HenrikChristensen關於子像素測量的評論。

+2

這是在任何時候都能在Chrome中正常工作的唯一答案。有了其他答案,它有時可以在Chrome中使用,有時不會(Firefox不會有這個子像素問題,並且始終如此)。 – OMA 2016-06-21 12:20:35

+1

這一個爲我工作。謝謝 – OST 2016-08-02 18:55:31

+0

非常好,這個解決方案彙總了上面評論中的每條建議。謝謝! – 2017-01-13 10:10:22

0

沒有jQuery的,對於onScroll事件

var scrollDiv = event.srcElement.body 
window.innerHeight + scrollDiv.scrollTop == scrollDiv.scrollHeight 
0

由於工作沒有jQuery的那樣:

var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight; 

我做的:

var node = $('#mydiv')[0]; // gets the html element 
if(node) { 
    var isBottom = node.scrollTop + node.offsetHeight === node.scrollHeight; 
} 
0

對我來說$el.outerHeight()給出了錯誤的值(由於邊界寬度),而$el.innerHeight()給出了正確的一個,所以我用

function isAtBottom($el){ 

    return ($el[0].scrollHeight - $el.scrollTop()) == $el.innerHeight(); 
}