Для начала работы с Locomotive Scroll необходимо установить библиотеку через npm или подключить её через CDN. Использование npm предоставляет больше возможностей для интеграции с современными сборщиками модулей.
npm install locomotive-scroll
После установки подключение библиотеки осуществляется через импорт в Jav * aScript:
import LocomotiveScroll from 'locomotive-scroll';
Инициализация создаётся на корневом элементе, который будет прокручиваться:
const scroll = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: true,
multiplier: 1.2,
class: 'is-reveal'
});
Ключевые параметры:
el — DOM-элемент, на котором будет происходить
прокрутка.smooth — включение плавной прокрутки.multiplier — множитель скорости скролла.class — CSS-класс, который добавляется элементам при
появлении на экране.Locomotive Scroll предоставляет API для отслеживания позиции скролла и срабатывания событий. Основные методы:
scroll.on('scroll', (args) => {
console.log(args.scroll.y); // текущая позиция по оси Y
});
Можно использовать события call, чтобы привязывать
анимации или действия к элементам с атрибутом
data-scroll-call:
scroll.on('call', (func, direction, obj) => {
if(func === 'fadeIn' && direction === 'enter') {
obj.el.classList.add('visible');
}
});
Особенности работы:
enter и leave указывают направление
пересечения элемента с видимой областью.obj содержит ссылку на элемент и
координаты.Locomotive Scroll не управляет анимациями напрямую, но тесно интегрируется с CSS и сторонними библиотеками, например, GSAP. Для плавного появления элементов можно использовать CSS:
[data-scroll] {
opacity: 0;
transform: translateY(20px);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
[data-scroll].is-reveal {
opacity: 1;
transform: translateY(0);
}
Активация класса через скролл добавляет плавный эффект.
Locomotive Scroll поддерживает горизонтальный скролл, что удобно для каруселей и лендингов с нестандартной прокруткой.
const scroll = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: true,
direction: 'horizontal'
});
Особенности горизонтального скролла:
direction: 'horizontal' меняет направление
скролла.display: flex; flex-direction: row;).При динамическом добавлении контента важно обновлять скролл, чтобы элементы корректно определялись.
scroll.update();
Для автоматического обновления при изменении размеров окна:
window.addEventListener('resize', () => {
scroll.update();
});
Рекомендации:
update() после загрузки изображений или
AJAX-контента.resize для корректного пересчета координат
элементов.Locomotive Scroll совместим с GSAP, Barba.js и другими библиотеками
для анимации и управления переходами. Для синхронизации анимаций с
прокруткой используется метод scroll.scrollTo:
scroll.scrollTo('#target-element', {
offset: -100,
duration: 1000,
easing: [0.25, 0.0, 0.35, 1.0]
});
Параметры метода scrollTo:
offset — смещение относительно целевого элемента.duration — длительность анимации в миллисекундах.easing — кривые ускорения (можно передать массив
значений cubic-bezier).Для больших страниц с множеством анимаций и элементов важно оптимизировать Locomotive Scroll:
requestAnimationFrame для тяжелых операций
внутри событий скролла.data-scroll.intersection observer для ленивой загрузки
элементов и изображений.const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if(entry.isIntersecting){
entry.target.classList.add('loaded');
}
});
}, { threshold: 0.1 });
document.querySelectorAll('.lazy').forEach(el => observer.observe(el));
Locomotive Scroll корректно работает на мобильных устройствах, но для оптимального UX стоит учитывать:
smooth: true на iOS может потреблять много ресурсов;
можно отключать для тяжелых страниц.touch и свайпов.const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
const scroll = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: !isMobile
});
Для анализа работы скролла используется консольное логирование событий и проверка состояния через DevTools.
scroll.on('scroll', (args) => console.log(args));
scroll.on('call', (func, direction, obj) => console.log(func, direction, obj));
Это позволяет отслеживать ошибки анимаций, неправильное позиционирование элементов и некорректную работу триггеров.