Waypoints — это библиотека для отслеживания положения элементов на странице относительно области видимости пользователя. Она позволяет реагировать на прокрутку страницы, что особенно полезно для ленивой подгрузки контента, анимаций при скролле, «липких» элементов и навигации по секциям. Основной принцип работы Waypoints — отслеживание момента, когда верхняя или нижняя граница элемента пересекает заданную точку в окне браузера.
var waypoint = new Waypoint({
element: document.getElementById('target'),
handler: function(direction) {
console.log('Scrolled to waypoint!', direction);
},
offset: '75%'
});
Пояснения ключевых параметров:
element — DOM-элемент, для которого создается
контрольная точка.handler — функция, вызываемая при пересечении точки
прокрутки. Аргумент direction сообщает направление:
"down" при движении вниз, "up" при движении
вверх.offset — смещение контрольной точки относительно
верхней границы окна. Может быть выражено в пикселях
('200px') или в процентах окна ('50%').Waypoints поддерживает несколько типов контроля:
Classic Waypoint Отслеживает элемент при пересечении контрольной точки.
Sticky Waypoint Позволяет элементу «прилипать» к верхней части окна при прокрутке. Пример:
var sticky = new Waypoint.Sticky({
element: document.getElementById('sticky-element')
});
var inview = new Waypoint.Inview({
element: document.getElementById('section'),
enter: function(direction) {
console.log('Element entered view from', direction);
},
exited: function(direction) {
console.log('Element exited view towards', direction);
}
});
Waypoints предоставляет возможность отключать, включать и уничтожать контрольные точки:
waypoint.disable(); // временно отключить
waypoint.enable(); // включить обратно
waypoint.destroy(); // полностью удалить waypoint
Это полезно для оптимизации производительности на больших страницах с множеством элементов.
Waypoints совместим с jQuery, что упрощает работу с множественными элементами:
$('.section').waypoint(function(direction) {
$(this.element).addClass('active');
}, { offset: '50%' });
Параметр this.element возвращает DOM-узел, на котором
сработал waypoint, что позволяет применять стили или анимации
индивидуально для каждого элемента.
Группы Waypoints позволяют объединять несколько контрольных точек и управлять их срабатыванием централизованно.
var group = new Waypoint.Group({
name: 'section-group'
});
Continuous Mode: по умолчанию Waypoints срабатывает только один раз при пересечении точки. Можно включить режим непрерывного срабатывания, чтобы обработчик вызывался каждый кадр при нахождении элемента в области видимости.
Horizontal Scrolling: Waypoints поддерживает
горизонтальную прокрутку через свой параметр
horizontal: true.
Waypoints оптимизирован для работы с множеством элементов, но при больших страницах с частыми событиями скролла рекомендуется:
offset в процентах, чтобы избежать
постоянного пересчета пикселей.Waypoints часто интегрируется в UI-компоненты для:
Пример комбинации с анимацией при скролле:
var sections = document.querySelectorAll('.animate-section');
sections.forEach(function(section) {
new Waypoint({
element: section,
handler: function(direction) {
section.classList.add('fade-in');
},
offset: '80%'
});
});
Здесь при пересечении 80% окна элемент получает класс
fade-in, запускающий CSS-анимацию.
Waypoints можно использовать с React, Vue или Angular, оборачивая компонент или элемент в эффект, который создает waypoint при монтировании:
useEffect(() => {
const waypoint = new Waypoint({
element: ref.current,
handler: (direction) => console.log(direction),
offset: '70%'
});
return () => waypoint.destroy();
}, []);
Такой подход обеспечивает корректное управление жизненным циклом компонента и освобождение ресурсов после его удаления.