Как получить событие прокрутки и подсчитать количество событий прокрутки

#jquery

#jquery

Вопрос:

Я пытаюсь добавить данные в html-таблицу, когда пользователь прокручивает страницу вниз до конца, что я могу сделать. Но как мне вести подсчет прокрутки вниз?? В каждом экземпляре мне нужно, чтобы количество добавлялось на единицу, каждый раз к моему URL будет добавляться это количество.. и когда количество достигает 6, я должен прекратить добавлять количество к URL-адресам.. Пожалуйста, поделитесь некоторыми соображениями о том, как к этому подойти…

Здесь добавлен тестовый файл

Ответ №1:

 var count = 1;  
jQuery("#scrollPane").scroll(function() {
    if (Math.ceil(boxHeight - $inner.offset().top   boxOffsetTop) >= innerOuterHeight ) {
    if(count==6)
    {
        alert("stop");
    }
    count  ;

}
});
  

http://jsfiddle.net/sk5yc/4/

Комментарии:

1. Большое спасибо, у меня все отлично сработало…. Но с одной проблемой.. Я добавляю данные с сервера в таблицу, при успешном завершении прокрутка переходит в среднюю позицию, и еще до того, как я потяну скроллер вниз, запускается следующий ajax-запрос.. я предполагаю, что вычисление высоты изменяется при добавлении данных в таблицу.. как мне это исправить.. Обновленный пример можно увидеть здесь jsfiddle.net/sk5yc/10

2. Проверьте это jsfiddle.net/sk5yc/11 все ваши объявления с возможностью изменения были вне функции прокрутки, поэтому высота не изменится даже после добавления новых данных. Итак, я переместил их внутрь функции прокрутки, взгляните

3. Большое спасибо… это работает как по волшебству … теперь я могу спать спокойно .. 🙂

Ответ №2:

 var counter = 1;
$(window).bind('scroll', function() {
    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
        alert(counter   " scroll me again");
        counter  ;
        if (counter > 6) {
            $(this).unbind('scroll');
            alert('no more scrolling')
        }
    }
});
  

-10 указывает, как далеко от конца страницы должен находиться пользователь, прежде чем функция выполнит. Это дает вам гибкость для настройки поведения по мере необходимости.

Когда количество достигнет 6, прокрутка будет отключена. Итак, функция отключена.

Проверьте рабочий пример на http://jsfiddle.net/wQfMx/3 /

Ответ №3:

Отслеживание прокрутки подобным образом, вероятно, вызовет у вас проблемы.

Я написал статью, которая отслеживает глубину прокрутки и передает информацию обратно в Google Analytics.

В ходе моей разработки я обнаружил, что событие прокрутки запускается много раз, намного чаще, чем я ожидал. Отслеживание количества было бы очень непредсказуемым. Я думаю, что, вероятно, было бы лучше отслеживать, прокручен ли документ на 90% вниз. Однако вам также необходимо иметь механизм запуска, чтобы останавливать обработку событий до тех пор, пока вы не будете готовы обрабатывать больше, иначе вы в конечном итоге выполните серию вызовов load content в быстрой последовательности.

Следующий код запускается при достижении глубины прокрутки документа 90%. Затем он блокируется и больше не запускает событие. После того, как вы загрузили свой контент, вы могли бы сбросить значение IsDuplicateScrollEvent обратно на 0, и триггер загрузки прокрутки снова заработал бы.

 <script src='http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js' type='text/javascript'></script> 
<script type='text/javascript'>
/* <![CDATA[ */
    var IsDuplicateScrollEvent = 0;

    $(document).ready(function () {
        TrackEventsForPageScroll();
    });


    function TrackEventsForPageScroll()
    {
       $(window).scroll(function(){
         var scrollPercent = GetScrollPercent();

         if(scrollPercent > 90)
         {
           if(IsDuplicateScrollEvent == 0)
           { 
             IsDuplicateScrollEvent = 1;
             alert("Page Scrolled to 90% in "   document.location.href);
             // trigger your content load here
           }
         }
       }); 
    }

    function GetScrollPercent()
    {
         var bottom = $(window).height()   $(window).scrollTop();
         var height = $(document).height();

         return Math.round(100*bottom/height);
    } 
/* ]]> */
</script>
  

Этот код взят из моей статьи на:

Ответ №4:

Вы пытаетесь использовать «бесконечную прокрутку»? Если это так, то для этого уже есть несколько плагинов jquery, таких какhttp://plugins.jquery.com/project/scrollLoad

Для этого также есть руководство, подобноеhttp://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery