javascript: обнаружение конца прокрутки


у меня есть div слой overflow значение scroll.

при прокрутке в нижней части div, Я хочу, чтобы запустить функцию.


8 54

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);
}

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

в отношении

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

(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

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