Waypoints — это библиотека для отслеживания положения элементов на странице при прокрутке. Она предоставляет механизм адаптеров, который позволяет интегрировать Waypoints с различными способами обработки прокрутки и DOM-структурой. Адаптеры определяют, как Waypoints взаимодействует с событиями прокрутки и вычисляет положение элементов на странице.
Адаптер — это объект, который реализует определённый интерфейс для работы с событиями прокрутки и DOM. В Waypoints стандартно используются два типа адаптеров:
Каждый адаптер должен обеспечивать следующие методы:
init(options) — инициализация адаптера с настройками
Waypoints.scroll(handler) — привязка функции-обработчика к
событию прокрутки.offset() — получение текущей прокрутки контейнера или
окна.innerHeight() — вычисление высоты контейнера для
корректного расчёта положения элементов.trigger(direction) — вызов обработчика Waypoint при
достижении элемента.Waypoints по умолчанию использует jQuery, если библиотека подключена, иначе использует Zepto.
Пример подключения jQuery Adapter:
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
console.log('Waypoint достигнут!', direction);
},
offset: '50%'
});
В этом случае Waypoints использует jQuery Adapter для отслеживания
позиции элемента #target. Метод offset
позволяет задать момент срабатывания относительно верхней границы окна
просмотра.
Waypoints позволяет создавать кастомные адаптеры для работы с нестандартными контейнерами, виртуальными списками или анимационными библиотеками. Для этого требуется реализовать объект с тем же интерфейсом, что и стандартные адаптеры.
Пример кастомного адаптера для элемента с прокруткой:
var CustomAdapter = {
init: function(options) {
this.element = options.element;
},
scroll: function(handler) {
this.element.addEventListener('scroll', handler);
},
offset: function() {
return this.element.scrollTop;
},
innerHeight: function() {
return this.element.clientHeight;
},
trigger: function(direction) {
this.handler(direction);
}
};
// Использование кастомного адаптера
var waypoint = new Waypoint({
element: document.getElementById('custom'),
handler: function(dir) {
console.log('Custom Waypoint', dir);
},
adapter: CustomAdapter,
offset: 100
});
В этом примере Waypoint будет отслеживать положение элемента внутри контейнера с кастомной прокруткой.
init(options) Принимает объект
конфигурации Waypoints. Обычно сохраняет ссылку на целевой элемент и
устанавливает начальные параметры.
scroll(handler) Метод для привязки
функции, которая будет вызываться при событии прокрутки. Адаптер должен
обеспечить корректное срабатывание обработчика, чтобы Waypoint мог
реагировать на изменение позиции элемента.
offset() Возвращает текущую позицию
прокрутки контейнера. В случае окна браузера это
window.pageYOffset, а для внутреннего контейнера —
scrollTop.
innerHeight() Возвращает высоту
видимой области контейнера. Используется для вычисления момента, когда
элемент появляется в видимой части.
trigger(direction) Позволяет
адаптеру вызвать обработчик Waypoint с указанием направления прокрутки
(up или down).
Отслеживание прокрутки внутри модальных окон Используя кастомный адаптер, можно определить Waypoints внутри модальных блоков с собственной прокруткой.
Интеграция с виртуальными списками В случае виртуализированных списков (например, с динамической подгрузкой элементов) кастомный адаптер позволяет корректно вычислять позиции элементов при обновлении DOM.
Связь с анимационными библиотеками Адаптер может вызывать Waypoints при прокрутке и одновременно запускать анимации элементов через GSAP или Anime.js, обеспечивая синхронизацию событий.
Waypoints.adapters являются ключевым механизмом расширяемости библиотеки, позволяя создавать гибкие и кастомизированные решения для любых сценариев прокрутки и отслеживания элементов на странице.