Waypoints — это библиотека на JavaScript, предназначенная для отслеживания положения элементов на странице при скролле. Она предоставляет удобный API для запуска функций, когда элемент появляется или исчезает из видимой области окна браузера. Это делает Waypoints идеальным инструментом для реализации параллакс-эффектов, где элементы двигаются с разной скоростью относительно скролла.
Для начала необходимо подключить библиотеку. Можно использовать CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/noframework.waypoints.min.js"></script>
Или установить через npm:
npm install waypoints
После подключения создаются объекты Waypoint, которые
отслеживают положение конкретных DOM-элементов.
Базовый Waypoint создается через конструктор
Waypoint:
var waypoint = new Waypoint({
element: document.getElementById('section1'),
handler: function(direction) {
console.log('Элемент достигнут при скролле ' + direction);
},
offset: '50%'
});
Пояснение параметров:
element — DOM-элемент, за которым необходимо
следить.handler — функция, которая выполняется при достижении
элемента. Параметр direction показывает направление скролла
(down или up).offset — смещение от верхней границы окна, при котором
срабатывает waypoint. Может быть задано в пикселях или процентах.Параллакс создается путем изменения позиции элемента при скролле с разной скоростью. Waypoints позволяют запускать анимацию или обновлять CSS-позицию элемента в момент появления блока на экране.
Пример параллакса для фона:
var parallaxSection = document.getElementById('parallax');
new Waypoint({
element: parallaxSection,
handler: function(direction) {
if (direction === 'down') {
parallaxSection.style.backgroundPositionY = '0%';
} else {
parallaxSection.style.backgroundPositionY = '100%';
}
},
offset: '0%'
});
В этом примере при прокрутке вниз фон перемещается с начальной позиции к концу блока. Для плавного движения можно использовать CSS-переходы:
#parallax {
background-image: url('image.jpg');
background-size: cover;
background-attachment: fixed;
transition: background-position 0.5s ease-out;
}
Для более сложных эффектов можно обновлять позицию элемента
пропорционально скроллу. В сочетании с Waypoints это делается через
отслеживание scroll в handler:
var movingElement = document.getElementById('move');
new Waypoint({
element: movingElement,
handler: function(direction) {
window.addEventListener('scroll', function() {
var scrollPos = window.pageYOffset;
movingElement.style.transform = 'translateY(' + scrollPos * 0.3 + 'px)';
});
},
offset: '50%'
});
Особенности такого подхода:
0.3 задает скорость движения относительно
скролла. Меньше значение — медленнее движение, больше — быстрее.translateY обеспечивает аппаратное ускорение и
плавность анимации.Для параллакс-эффектов часто нужно анимировать несколько элементов с разными скоростями. Waypoints можно создавать в цикле:
var elements = document.querySelectorAll('.parallax-item');
elements.forEach(function(el, index) {
new Waypoint({
element: el,
handler: function(direction) {
var speed = 0.2 + index * 0.1;
el.style.transform = 'translateY(' + window.pageYOffset * speed + 'px)';
},
offset: '75%'
});
});
Такой подход позволяет создавать сложные слоистые эффекты, где каждый элемент движется с уникальной скоростью, создавая глубину сцены.
Waypoints можно временно отключать или удалить для оптимизации производительности:
var waypoint = new Waypoint({ /* параметры */ });
// Отключение
waypoint.disable();
// Повторное включение
waypoint.enable();
// Полное удаление
waypoint.destroy();
Это особенно важно при параллаксе на длинных страницах, чтобы не перегружать браузер лишними обработчиками scroll.
Waypoints отлично комбинируются с CSS-анимациями. Можно добавить классы с анимацией при достижении элемента:
new Waypoint({
element: document.getElementById('fadeInSection'),
handler: function(direction) {
this.element.classList.add('animate-fade-in');
},
offset: '80%'
});
.animate-fade-in {
opacity: 1;
transform: translateY(0);
transition: opacity 1s ease, transform 1s ease;
}
#fadeInSection {
opacity: 0;
transform: translateY(50px);
}
Таким образом, элементы плавно появляются и перемещаются при прокрутке, создавая выразительные параллакс-эффекты без сложных вычислений.
scroll с помощью
requestAnimationFrame.transform: translateY вместо изменения
top или margin для аппаратного ускорения.Эти приемы позволяют создавать сложные параллакс-эффекты, сохраняя плавность анимации на любых устройствах.
Waypoints обеспечивает точное срабатывание функций при скролле, гибкое управление смещением и направление прокрутки, что делает его мощным инструментом для создания динамических параллакс-сцен на веб-страницах.