Locomotive Scroll — это современная библиотека для плавного скролла с
расширенными возможностями анимации и управления положением элементов на
странице. Одним из ключевых аспектов её работы является событие
scroll, которое позволяет отслеживать текущую позицию
прокрутки и реагировать на неё динамически.
Для начала необходимо создать экземпляр LocomotiveScroll
и задать контейнер скролла. Обычно используется блок с атрибутом
data-scroll-container:
import LocomotiveScroll fr om 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1.0,
});
el — контейнер для прокрутки.smooth — включает плавную
прокрутку.multiplier — регулирует скорость
скролла.scrollБиблиотека предоставляет метод .on(event, callback) для
подписки на различные события, включая scroll. Событие
scroll вызывается при каждом обновлении позиции прокрутки и
передаёт объект с информацией о текущем состоянии.
scroll.on('scroll', (args) => {
console.log(args.scroll.y); // вертикальная позиция скролла
console.log(args.scroll.x); // горизонтальная позиция скролла
});
args.scroll.y — вертикальная
координата текущей позиции.args.scroll.x — горизонтальная
координата (актуально при горизонтальной прокрутке).args.lim it.y /
args.limit.x — максимальное значение скролла по
вертикали и горизонтали.scroll для анимацийСобытие scroll активно используется для создания
параллакса, анимаций элементов при прокрутке и динамического изменения
стилей. Пример параллакса для фона:
scroll.on('scroll', (args) => {
const background = document.querySelector('.parallax-bg');
background.style.transform = `translateY(${args.scroll.y * 0.3}px)`;
});
0.3 определяет скорость смещения фона
относительно прокрутки.Событие scroll вызывается очень часто, поэтому для
сложных вычислений рекомендуется использовать
дебаунсинг или
requestAnimationFrame:
let ticking = false;
scroll.on('scroll', (args) => {
if (!ticking) {
window.requestAnimationFrame(() => {
updateAnimations(args.scroll.y);
ticking = false;
});
ticking = true;
}
});
function updateAnimations(y) {
document.querySelector('.element').style.opacity = 1 - y / 1000;
}
Locomotive Scroll поддерживает события call и
enter/leave, которые часто комбинируются с
scroll для более точного управления элементами:
scroll.on('call', (func, way, obj) => {
console.log(`Функция: ${func}, Направление: ${way}, Элемент:`, obj.el);
});
call активируется на элементах с атрибутом
data-scroll-call.Locomotive Scroll поддерживает горизонтальный скролл через опцию
direction: 'horizontal'. Событие scroll при
этом передаёт значение args.scroll.x:
const horizontalScroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
direction: 'horizontal',
});
horizontalScroll.on('scroll', (args) => {
console.log(args.scroll.x); // позиция по горизонтали
});
scroll.on('scroll', ({ scroll }) => {
const el = document.querySelector('.fade');
el.style.opacity = 1 - scroll.y / 500;
});
scroll.on('scroll', ({ scroll }) => {
const section = document.querySelector('.section');
const sectionTop = section.offsetTop;
const sectionHeight = section.offsetHeight;
if (scroll.y > sectionTop && scroll.y < sectionTop + sectionHeight) {
section.classList.add('active');
} else {
section.classList.remove('active');
}
});
scroll.on('scroll', ({ scroll }) => {
const sticky = document.querySelector('.sticky');
sticky.style.transform = `translateY(${scroll.y}px)`;
});
scroll не следует перегружать тяжёлыми
DOM-операциями.requestAnimationFrame.window.scroll
не учитывают плавную прокрутку.Событие scroll в Locomotive Scroll является основой
динамического управления контентом и анимациями. Его правильное
использование позволяет создавать сложные визуальные эффекты и плавные
взаимодействия с пользователем.