Waypoints — это библиотека для JavaScript, позволяющая отслеживать прокрутку страницы и запускать функции при достижении определённых элементов или координат. Основная идея строится на точках наблюдения (waypoints), которые фиксируют момент появления элемента в видимой области окна браузера и позволяют реагировать на это событие.
Для создания точки наблюдения используется объект
Waypoint. Его минимальная структура выглядит следующим
образом:
var waypoint = new Waypoint({
element: document.getElementById('example-element'),
handler: function(direction) {
console.log('Элемент достигнут! Направление: ' + direction);
}
});
Ключевые параметры:
element — DOM-элемент, на котором будет срабатывать
точка наблюдения.handler — функция-обработчик события, получает аргумент
direction, который может принимать значения
'down' или 'up'.offset (опционально) — смещение от верхней границы окна
браузера, при котором срабатывает waypoint. Может быть числом в пикселях
или строкой с процентом, например '50%'.Пример с использованием смещения:
var waypoint = new Waypoint({
element: document.getElementById('example-element'),
handler: function(direction) {
console.log('50% элемента достигнуто!');
},
offset: '50%'
});
Waypoints отслеживает направление движения страницы:
'down' — пользователь скроллит вниз, элемент появляется
в окне сверху.'up' — пользователь скроллит вверх, элемент
возвращается в видимую область снизу.Это позволяет создавать триггеры, зависящие от направления, например, анимации при прокрутке вниз и обратные анимации при прокрутке вверх:
var waypoint = new Waypoint({
element: document.getElementById('section'),
handler: function(direction) {
if (direction === 'down') {
this.element.classList.add('animate');
} else {
this.element.classList.remove('animate');
}
},
offset: '75%'
});
offset управляет точкой срабатывания. Возможные
варианты:
offset: 100 —
waypoint срабатывает, когда верх элемента находится на 100 пикселей ниже
верхней границы окна.offset: '50%' — waypoint
срабатывает, когда элемент находится в середине окна.offset: function() { return this.element.clientHeight / 2; }
— динамическое вычисление смещения.Такое разнообразие позволяет точно контролировать момент активации точки наблюдения.
Waypoints можно объединять в группы для массового
управления. По умолчанию все точки наблюдения входят в группу
'default', но можно создавать свои:
var waypoint1 = new Waypoint({
element: document.getElementById('first'),
handler: function() {},
group: 'animations'
});
var waypoint2 = new Waypoint({
element: document.getElementById('second'),
handler: function() {},
group: 'animations'
});
// Обновление всех waypoint-ов группы
Waypoint.Group.findByName('animations').firstContext.refresh();
Группы позволяют одновременно обновлять или отключать множество waypoint-ов, что полезно при динамическом изменении контента страницы.
Waypoints использует контексты (contexts) для отслеживания прокрутки в разных областях, не ограничиваясь основным окном:
window.var context = new Waypoint.Context(document.getElementById('scroll-container'));
var waypoint = new Waypoint({
element: document.getElementById('inner-element'),
handler: function() {},
context: context
});
Контексты позволяют создавать локальные точки наблюдения, полезные для скролл-блоков внутри страницы.
Waypoints предоставляет методы для включения, отключения и уничтожения точек наблюдения:
waypoint.enable() — активирует waypoint.waypoint.disable() — временно отключает waypoint.waypoint.destroy() — удаляет waypoint и освобождает
ресурсы.Это важно при динамическом изменении DOM или условной активации анимаций.
var sections = document.querySelectorAll('.section');
sections.forEach(function(section) {
new Waypoint({
element: section,
handler: function(direction) {
section.classList.add('active');
if (direction === 'up') {
section.classList.remove('active');
}
},
offset: '75%'
});
});
Здесь каждая секция страницы получает waypoint с динамическим управлением классами в зависимости от направления прокрутки. Это основной паттерн для интерактивных скролл-эффектов.
Waypoints предоставляет гибкий механизм точек наблюдения, который позволяет отслеживать видимость элементов, управлять анимациями, выполнять действия при прокрутке, учитывать направление движения и создавать динамичные интерфейсы с точным контролем времени срабатывания.