JavaScript: обнаружить конец прокрутки - PullRequest
57 голосов
/ 18 октября 2010

У меня есть слой div с overflow, установленным на scroll.

При прокрутке до нижней части div я хочу запустить функцию.


image

Ответы [ 8 ]

93 голосов
/ 09 января 2011

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

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

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

6 голосов
/ 28 ноября 2013

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

У вас есть вызов 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
   }
}
6 голосов
/ 01 августа 2012

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

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

Надеюсь, это кому-нибудь поможет!

4 голосов
/ 01 марта 2013

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

$(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 голосов
/ 18 июля 2013

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

Ни один из этих ответов не сработал для меня (в настоящее время тестирование в 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

С уважением

1 голос
/ 26 января 2015

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

(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%;
}

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

0 голосов
/ 06 августа 2014

Поскольку 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();
    }
});
0 голосов
/ 17 июля 2014

Взгляните на этот пример: 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");
    }
});
...