2011-04-29 5 views
34

Mam element div z przepełnieniem: przewiń.Jak mogę użyć JQuery, aby sprawdzić, czy div jest przewinięty do samego końca?

Chcę wiedzieć, czy jest przewijany do samego końca. Jak korzystać z JQuery?

Ten jeden nie działa: How can I determine if a div is scrolled to the bottom?

+2

oceniły tę wyszukując za pomocą google, bardzo interesujący http://yelotofu.com/2008/10/jquery-how-to-tell-if-youre-scroll-to-bottom/ –

+0

można wyjaśnić, co dzieje się, gdy podany link nie działa? może dodać trochę znaczników? –

Odpowiedz

65

Oto poprawne rozwiązanie (jsfiddle). Krótkie spojrzenie na kod:

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

Zobacz this aby uzyskać więcej informacji.

+8

Oto demo z irytującym 'alert()': http://jsfiddle.net/Blender/aBc3h/7/ – Blender

+2

thanks @blender – samccone

+0

To jest doskonałe rozwiązanie. Pracuję nad rozwiązaniem, w którym element div zawierający treść może być skalowalny, i muszę ponownie sprawdzić status przewijania za każdym razem, gdy rozmiar div zostanie zmieniony, ponieważ nie jest on uruchamiany za każdym razem. Czy jest jakieś wydarzenie? – SoonDead

4

Można to zrobić przez

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

Zastosuj wymagane jQuery składni, oczywiście ...

0

Oto kod:

$("#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 Firefox zawiera właściwość scrollTopMax. Jeśli jesteś scrollTop === scrollTopMax, jesteś na samym dole elementu.

+0

Interesujące, ale nie obsługiwane przez żadną przeglądarkę (i wydaje się, że tak nie będzie)? –

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

Jest to odmiana odpowiedzi @ samccone, która zawiera komentarz @ HenrikChristensen dotyczący pomiarów subpikseli.

+2

Jest to jedyna odpowiedź, która działa poprawnie w przeglądarce Chrome przez cały czas. Z innymi odpowiedziami czasami działa w Chrome, a czasami nie (Firefox nie ma tego problemu z subpiksem i zawsze działa niezależnie). – OMA

+1

Ten pracował dla mnie. Dzięki – OST

+0

Bardzo ładne, to rozwiązanie agreguje każdą radę z powyższych komentarzy. Dzięki! –

0

Bez jQuery, dla onScroll imprezy

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

Jako że działa bez jQuery tak:

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

zrobić:

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

Dla mnie $el.outerHeight() daje złą wartość (ze względu na szerokość obramowania), podczas gdy $el.innerHeight() podaje poprawną, więc używam

function isAtBottom($el){ 

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