Для работы с библиотекой Waypoints необходимо подключение jQuery, так как она работает поверх него. Сначала подключается сам jQuery, затем библиотека Waypoints.
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
Waypoints можно подключить как через CDN, так и локально, скачав библиотеку с официального репозитория. Важно соблюдать порядок подключения: сначала jQuery, затем Waypoints.
Waypoint позволяет отслеживать, когда определённый элемент появляется в области видимости окна браузера.
$('#element').waypoint(function(direction) {
if (direction === 'down') {
console.log('Элемент прокручен вниз');
} else {
console.log('Элемент прокручен вверх');
}
}, {
offset: '50%' // Точка срабатывания: половина окна
});
Параметры:
direction — направление прокрутки, которое вызвало
срабатывание (down или up).offset — смещение от верхней границы окна браузера, в
пикселях или процентах. Позволяет точно настроить момент
срабатывания.Waypoints легко создаются для нескольких элементов через циклы. Например, для списка блоков:
$('.section').each(function() {
var section = $(this);
section.waypoint(function(direction) {
section.addClass('active');
if (direction === 'up') {
section.removeClass('active');
}
}, {
offset: '75%'
});
});
Такой подход позволяет динамически отслеживать прокрутку по множественным элементам, изменяя их состояние или класс.
Waypoints поддерживает не только вертикальную прокрутку, но и
горизонтальную. Для этого используется модификация
horizontal:
$('#horizontal-element').waypoint({
handler: function(direction) {
console.log('Горизонтальное движение', direction);
},
horizontal: true,
offset: '50%'
});
horizontal: true позволяет отслеживать появление
элементов при горизонтальной прокрутке контейнера.
Waypoint можно отключить для конкретного элемента с помощью метода
destroy(). Это освобождает ресурсы и предотвращает лишние
срабатывания:
var waypoint = new Waypoint({
element: document.getElementById('element'),
handler: function() {
console.log('Сработал один раз');
this.destroy(); // Waypoint больше не активен
}
});
Это полезно для анимаций, которые должны произойти только один раз.
Waypoints имеет дополнительный плагин Sticky для
реализации закрепленных элементов. Принцип работы: элемент фиксируется в
верхней части окна при прокрутке.
var sticky = new Waypoint.Sticky({
element: $('#menu')[0]
});
Особенности:
element — DOM-узел, который должен быть закреплен.Waypoints позволяет объединять элементы в группы и задавать отдельный контекст для отслеживания.
var group = new Waypoint.Group({
name: 'sections',
handlers: []
});
$('.section').each(function() {
new Waypoint({
element: this,
group: group,
handler: function(direction) {
console.log('Секция сработала', direction);
},
offset: '25%'
});
});
Контексты:
window.context.new Waypoint({
element: $('#element')[0],
context: $('#scroll-container')[0],
handler: function(direction) {
console.log('Сработало в контейнере');
}
});
continuous и enabledcontinuous — если true, waypoint может
срабатывать несколько раз при одной прокрутке.enabled — позволяет временно отключить waypoint без
удаления:var wp = new Waypoint({
element: $('#element')[0],
handler: function() {
console.log('Сработало');
},
continuous: false
});
wp.disable(); // Отключить
wp.enable(); // Включить снова
Эти параметры важны для оптимизации производительности на больших страницах с множеством анимаций.
Waypoints часто используется для запуска анимаций при скролле. Комбинируется с добавлением CSS-классов:
$('.animate').waypoint(function(direction) {
$(this.element).addClass('fade-in');
}, {
offset: '80%'
});
В сочетании с CSS-анимациями это позволяет создавать плавные интерактивные эффекты без использования сторонних библиотек для скролла.
Можно использовать селекторы jQuery и делегировать обработку сразу для всех элементов:
$('.item').waypoint(function(direction) {
$(this.element).toggleClass('visible', direction === 'down');
}, {
offset: '90%'
});
Подобная реализация упрощает код и уменьшает количество объектов Waypoints, улучшая производительность на больших страницах.
Waypoints в связке с jQuery предоставляет гибкий и точный инструмент
для отслеживания скролла, управления классами, анимациями и поведением
элементов в зависимости от положения на странице. Правильное
использование параметров offset, context,
continuous и методов destroy,
enable, disable позволяет создавать динамичные
и отзывчивые интерфейсы без лишней нагрузки на DOM и события
прокрутки.