Для начала необходимо подключить библиотеку Locomotive Scroll через npm или CDN. Основная установка через npm выглядит так:
npm install locomotive-scroll
После установки импортируем библиотеку и создаем экземпляр:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1,
class: 'is-inview'
});
Ключевые параметры инициализации:
data-scroll-container.По умолчанию Locomotive Scroll перехватывает стандартный скролл страницы и заменяет его виртуальным. Это позволяет:
data-scroll.direction.Примеры атрибутов:
<div data-scroll data-scroll-speed="2">Элемент с ускоренной прокруткой</div>
<div data-scroll data-scroll-delay="0.5">Элемент с задержкой анимации</div>
Locomotive Scroll предоставляет несколько методов для управления событиями:
scroll, call,
call:enter, call:exit.scroll.on('scroll', (obj) => {
console.log(obj.scroll.y); // текущая позиция по вертикали
});
scroll.on('call', (func, dir, obj) => {
if(func === 'myFunction') {
console.log('Элемент вызвал call:', dir);
}
});
update() — обновляет внутренние расчеты, полезно при динамическом изменении контента.
scrollTo(target, options) — программное управление скроллом:
scroll.scrollTo('#section2', {
offset: -100,
duration: 2000,
easing: [0.25, 0.00, 0.35, 1.00]
});
Параметры метода:
Изменение скорости и направления прокрутки элементов:
<div data-scroll data-scroll-speed="3" data-scroll-direction="horizontal">
Горизонтальный скролл
</div>
vertical или horizontal.Анимации при попадании в видимую область:
scroll.on('call', (func, dir, obj) => {
if(func === 'fadeIn') {
obj.el.style.opacity = 1;
obj.el.style.transform = 'translateY(0)';
}
});
Для более сложных анимаций используется комбинация
data-scroll, CSS-переходов и JavaScript.
При большом количестве элементов важно оптимизировать прокрутку:
data-scroll-repeat для повторных анимаций
только если необходимо.scroll на каждом
элементе.update() после динамического изменения
контента.Locomotive Scroll отлично сочетается с GSAP, Anime.js и другими инструментами:
import gsap from 'gsap';
scroll.on('scroll', (obj) => {
gsap.to('.box', {
y: obj.scroll.y / 2,
duration: 1
});
});
Такой подход позволяет синхронизировать прокрутку с анимациями элементов, создавая сложные визуальные эффекты.
Можно переопределять базовое поведение колесика мыши и сенсорных свайпов через опции:
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
lerp: 0.1, // сглаживание инерции
smartphone: {
smooth: false
},
tablet: {
smooth: true
}
});
Можно полностью переопределить поведение скролла для отдельных блоков:
scroll.on('scroll', (obj) => {
const customElement = document.querySelector('.custom');
customElement.style.transform = `translateX(${obj.scroll.y * 0.5}px)`;
});
Такой подход позволяет реализовать уникальные эффекты, не ограниченные стандартными атрибутами библиотеки.
Этот набор методов, атрибутов и событий предоставляет полный контроль над поведением прокрутки, позволяя создавать сложные, интерактивные интерфейсы с динамическими эффектами, плавными анимациями и кастомной реакцией на пользовательский ввод.