javascript: обнаружение конца прокрутки
у меня есть div
слой overflow
значение scroll
.
при прокрутке в нижней части div
, Я хочу, чтобы запустить функцию.
8 ответов:
принятый ответ был принципиально ошибочным, с тех пор он был удален. Правильный ответ:
function scrolled(e) { if (myDiv.offsetHeight + myDiv.scrollTop >= myDiv.scrollHeight) { scrolledToBottom(e); } }
проверил это в Firefox, Chrome и Opera. Это работает.
Я не мог получить ни один из вышеперечисленных ответов, чтобы работать так вот третий вариант, который работает для меня! (Используется с jQuery)
if (($(window).innerHeight() + $(window).scrollTop()) >= $("body").height()) { //do stuff }
надеюсь, это поможет кому-нибудь!
ОК Вот хорошее и правильное решение
у вас есть вызов Div с
id="myDiv"
Так что функция идет.
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 } }
это сработало для меня:
$(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 или выше
Я нашел альтернативу, которая работает.
ни один из этих ответов не работал для меня (в настоящее время тестирование в FireFox 22.0), и после многих исследований я нашел, что кажется, гораздо более чистое и прямое решение.
решение:
function IsScrollbarAtBottom() { var documentHeight = $(document).height(); var scrollDifference = $(window).height() + $(window).scrollTop(); return (documentHeight == scrollDifference); }
в отношении
Я создал на основе событий решение на основе ответа Бьорн Типлинг это:
(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'); });
кстати: вам нужно добавить этот CSS для javascript, чтобы узнать, как долго страница
html, body { height: 100%; }
взгляните на этот пример: элемент MDN.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"); } });
С
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(); } });