Библиотека Waypoints предоставляет удобный способ реагирования на события прокрутки страницы. В основе лежит идея: можно «прикрепить» обработчик к элементу, который срабатывает, когда элемент достигает определённой позиции относительно окна браузера.
Создание waypoint осуществляется через конструктор:
var waypoint = new Waypoint({
element: document.getElementById('my-element'),
handler: function(direction) {
console.log('Элемент достиг точки:', direction);
},
offset: '50%' // смещение относительно верха окна
});
element — DOM-элемент, за которым ведётся
наблюдение.handler — функция обратного вызова, вызываемая при
пересечении точки. Параметр direction указывает направление
прокрутки: 'down' или 'up'.offset — смещение точки срабатывания от верха окна.
Может быть числом в пикселях (100) или процентом
('50%').Смещение (offset) позволяет гибко управлять моментом
срабатывания waypoint. Если указать '0%', событие
произойдёт, когда верх элемента совпадёт с верхом окна.
'100%' — срабатывание при достижении нижней границы
окна.
Примеры:
// Событие при достижении 100px от верха окна
new Waypoint({
element: document.getElementById('header'),
handler: function(dir) { console.log(dir); },
offset: 100
});
// Событие при прохождении середины окна
new Waypoint({
element: document.getElementById('section'),
handler: function(dir) { console.log(dir); },
offset: '50%'
});
Waypoints поддерживает вертикальные (Waypoints) и
горизонтальные (Horizontal Waypoints) отслеживания:
var horizontalWaypoint = new Waypoint({
element: document.getElementById('scroll-item'),
handler: function(direction) {
console.log('Горизонтальная прокрутка:', direction);
},
horizontal: true,
offset: '75%'
});
horizontal: true.По умолчанию Waypoints отслеживает прокрутку окна браузера. Можно
задать любой контейнер прокрутки с помощью свойства
context:
var waypoint = new Waypoint({
element: document.getElementById('item'),
handler: function(dir) { console.log(dir); },
context: document.getElementById('scrollable-div')
});
context — DOM-элемент с прокруткой, внутри которого
ведётся отслеживание.Waypoints часто используют для реализации «прилипших» элементов
(sticky). Для этого применяется sticky
shortcut:
var sticky = new Waypoint.Sticky({
element: document.getElementById('navbar')
});
Waypoints предоставляет методы для управления событиями после их создания:
// Отключение waypoint
waypoint.disable();
// Включение обратно
waypoint.enable();
// Удаление waypoint полностью
waypoint.destroy();
disable — временно деактивирует обработчик.destroy — полностью удаляет объект, освобождая память и
предотвращая дальнейшие срабатывания.Для сложных интерфейсов удобно объединять несколько waypoint в группы. Группы позволяют контролировать порядок срабатываний и избегать конфликтов:
Waypoint.Group.add(waypoint);
Waypoint.Group.flush();
Group.flush() — принудительно проверяет все waypoint
группы на соответствие текущей позиции прокрутки.var elements = document.querySelectorAll('.animate-on-scroll');
elements.forEach(function(el) {
new Waypoint({
element: el,
handler: function(direction) {
el.classList.add('fade-in');
},
offset: '80%'
});
});
fade-in, когда доходят
до 80% высоты окна.direction можно использовать для различной анимации при
скролле вверх и вниз.При множестве waypoint важно учитывать производительность:
context для локальных контейнеров, чтобы
не перегружать обработку всего окна.destroy).Waypoints позволяет создавать динамичные и отзывчивые интерфейсы, реагирующие на прокрутку без сложных ручных расчётов позиции элементов и событий scroll.