2010-10-18 2 views

ответ

85

Принятый ответ был в корне ошибочным, с тех пор он был удален. Правильный ответ:

function scrolled(e) { 
    if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) { 
    scrolledToBottom(e); 
    } 
} 

Протестировано в Firefox, Chrome и Opera. Оно работает.

+0

Можете ли вы сообщить нам, почему это испорчено? – SpoonMeiser

+4

Поскольку он не обнаруживает конца прокрутки вообще, он обнаруживает, когда часть страницы, прокручиваемой вверх и высота содержащего div, одинаковы! Предположим, что у вас есть дважды содержимое для прокрутки, чем высота div, как только вы достигли самого конца, значение scrollTop будет в два раза больше, чем смещение. Принятый ответ проверяет, равны ли они, и он не обнаружит конца. Мое решение проверяет, соответствует ли scrollTop + высота контейнера (или больше, чем это происходит) всей области прокрутки, теперь это нижняя часть! –

+5

@Alex 'window.location.href = 'http: //newurl.com';' или 'window.open ('http://newurl.com');' + код выше. –

6

Я не мог получить ни один из приведенных выше ответов, чтобы работать, поэтому вот третий вариант, который работает для меня! (Используется с jQuery)

if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) { 
    //do stuff 
} 

Надеюсь, это поможет любому!

+1

работал отлично, спасибо – Amir5000

4

Это работает для меня:

$(window).scroll(function() { 
    buffer = 40 // # of pixels from bottom of scroll to fire your function. Can be 0 
    if ($(".myDiv").prop('scrollHeight') - $(".myDiv").scrollTop() <= $(".myDiv").height() + buffer) { 
    doThing(); 
    } 
}); 

должны использовать JQuery 1.6 или выше

3

я нашел альтернативу, которая работает.

Ни один из этих ответов не работал для меня (в настоящее время тестируется в FireFox 22.0), и после многих исследований я нашел, как представляется, гораздо более чистое и прямое решение.

Реализовано решение:

function IsScrollbarAtBottom() { 
    var documentHeight = $(document).height(); 
    var scrollDifference = $(window).height() + $(window).scrollTop(); 
    return (documentHeight == scrollDifference); 
} 

Ресурс: http://jquery.10927.n7.nabble.com/How-can-we-find-out-scrollbar-position-has-reached-at-the-bottom-in-js-td145336.html

С уважением

+0

Спасибо, это правильный ответ! – CORSAIR

+0

Это был единственный ответ, который сработал для меня, спасибо! – YtramX

6

OK Вот хороший и правильное решение

Поступил вызов Div с id="myDiv"

поэтому функция g OES.

function GetScrollerEndPoint() 
{ 
    var scrollHeight = $("#myDiv").prop('scrollHeight'); 
    var divHeight = $("#myDiv").height(); 
    var scrollerEndPoint = scrollHeight - divHeight; 

    var divScrollerTop = $("#myDiv").scrollTop(); 
    if(divScrollerTop === scrollerEndPoint) 
    { 
     //Your Code 
     //The Div scroller has reached the bottom 
    } 
} 
+0

Работал для меня, тестирование в Chrome с помощью стола – Adrian

+0

Спасибо! Это работает для меня как для Firefox, так и для Chrome: D – mr5

0

Взгляните на этот пример: MDN Element.scrollHeight

Я рекомендую почитать этот пример: stackoverflow.com/a/24815216..., который реализует обработку для действия прокрутки кросс-браузер.

Вы можете использовать следующий фрагмент кода:

//attaches the "scroll" event 
$(window).scroll(function (e) { 
    var target = e.currentTarget, 
     scrollTop = target.scrollTop || window.pageYOffset, 
     scrollHeight = target.scrollHeight || document.body.scrollHeight; 
    if (scrollHeight - scrollTop === $(target).innerHeight()) { 
     console.log("► End of scroll"); 
    } 
}); 
0

Поскольку innerHeight не работает в некоторых старых версиях IE, clientHeight могут быть использованы:

$(window).scroll(function (e){ 
    var body = document.body;  
    //alert (body.clientHeight); 
    var scrollTop = this.pageYOffset || body.scrollTop; 
    if (body.scrollHeight - scrollTop === parseFloat(body.clientHeight)) { 
     loadMoreNews(); 
    } 
}); 
1

Я создал решение, основанное на событии на основе Бьорн Типлинг:

(function(doc){ 
    'use strict'; 

    window.onscroll = function (event) { 
     if (isEndOfElement(doc.body)){ 
      sendNewEvent('end-of-page-reached'); 
     } 
    }; 

    function isEndOfElement(element){ 
     //visible height + pixel scrolled = total height 
     return element.offsetHeight + element.scrollTop >= element.scrollHeight; 
    } 

    function sendNewEvent(eventName){ 
     var event = doc.createEvent('Event'); 
     event.initEvent(eventName, true, true); 
     doc.dispatchEvent(event); 
    } 
}(document)); 

И вы используете канун нт, как это:

document.addEventListener('end-of-page-reached', function(){ 
    console.log('you reached the end of the page'); 
}); 

BTW: вам нужно добавить этот CSS для JavaScript, чтобы знать, как долго страница

html, body { 
    height: 100%; 
} 

Демо: http://plnkr.co/edit/CCokKfB16iWIMddtWjPC?p=preview

+0

Теперь я вижу, что OP запросил конец div, а не конец страницы, но я оставлю здесь ответ, если он поможет кому-то другому. – Pylinux

Смежные вопросы