Обнаружение прокрутки до низа div с jQuery: решения

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для обнаружения момента, когда содержимое div прокручено до конца, используйте событие scroll в jQuery. Соотношение между scrollTop() и innerHeight() div’а с scrollHeight позволит вам это сделать:

JS
Скопировать код
$('#div').on('scroll', function() {
  if($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight) {
    alert('Вы докрутили до конца!');
  }
});

Вместо устаревшего .bind(), начиная с jQuery 1.7, используйте метод .on() для назначения обработчиков событий.

Тонкости отслеживания прокрутки конкретного div

Чтобы отслеживать прокрутку только заданного div, его нужно связать с событием scroll вместо глобального объекта window.

Особенности высоты элемента: отступы и границы

Помните, что innerHeight включает в себя отступы элемента, но не учитывает границы и полосу прокрутки. Для корректного учета всех параметров используйте функцию parseInt.

Важные нюансы определения момента прокрутки

Обратите внимание: из-за погрешностей округления scrollTop() + innerHeight() может быть немного меньше, чем scrollHeight. Чтобы избежать ошибки, используйте оператор ">=" вместо "==".

Визуализация

Процесс отслеживания прокрутки можно представить с помощью упрощенной аналогии:

Markdown
Скопировать код
Полоса прокрутки — это ребенок (👦), который прячется в доме (🏠), представляющем собой div.

👦: В начале div, как в коридоре
🏠: [🛋️🛋️🛋️...🛋️] (Контент перед ним)
👦: Прокручивает страницу, подобно шагам в коридоре
🏠: [🛋️🛋️👦...🛋️] (Приближается к концу)

И вот ребенок доходит до конца коридора:

Markdown
Скопировать код
👦: Закончил свой путь (дошел до конца div)
🏠: [🛋️🛋️🛋️...👦] (Контент закончился, достигнут низ блока!)

Мы поймали ребенка как только он думал, что самый спрятаный!

Реализация бесконечной прокрутки

Хотите создать бесконечную прокрутку на своем сайте? Применяйте описанный выше метод отслеживания конца контента для динамической подгрузки новых данных. Избегайте многократных загрузок данных, используя флаги или ограничения скорости событий прокрутки.

Работоспособность в разных браузерах

В большинстве браузеров все будет работать одинаково, но всегда стоит проверять функциональность в разных окружениях. Дополнительную информацию можно найти в документации MDN Web Docs и официальной документации jQuery.

Оптимизация производительности прокрутки

События прокрутки могут срабатывать очень часто, поэтому важно использовать техники уменьшения их количества для сохранения производительности — такие как дросселирование и дебаунсинг. Для сокращения операций с DOM кэшируйте объекты jQuery в переменных.

Полезные материалы

  1. Событие scroll | Документация по API jQuery — основы работы событий .scroll() в документации jQuery.
  2. Обработка событий | Учебный центр jQuery — подробное руководство по работе с событиями в jQuery.
  3. Элемент: событие scroll – Web APIs | MDN — базовые сведения о событии scroll от Mozilla.
  4. Check if a user has scrolled to the bottom – Stack Overflow — опыт и решения сообщества на Stack Overflow.
  5. Tutorial | DigitalOcean — пошаговые указания по реализации бесконечной прокрутки от DigitalOcean.