Locomotive Scroll — это современная библиотека для плавной прокрутки и анимации веб-страниц с эффектом параллакса. Основная задача библиотеки — управление поведением прокрутки и синхронизация с различными элементами интерфейса. В основе работы лежит кастомная система виртуального скролла, которая заменяет стандартный браузерный скролл и позволяет реализовать сложные визуальные эффекты без потери производительности.
Ключевым понятием является объект LocomotiveScroll,
который инкапсулирует состояние скролла, его скорость, направление и
позиции элементов на странице. Он предоставляет набор методов,
событий и свойств, доступных для взаимодействия с DOM и
управления анимациями.
При инициализации LocomotiveScroll используется
объект настроек:
const scroll = new LocomotiveScroll({
el: document.querySelector('#scroll-container'),
smooth: true,
direction: 'vertical',
multiplier: 1.5,
lerp: 0.1
});
Основные свойства:
el (HTMLElement) — контейнер, который будет
прокручиваться.smooth (Boolean) — включение плавной прокрутки.direction (String:
'vertical' | 'horizontal') — направление скролла.multiplier (Number) — коэффициент скорости
прокрутки.lerp (Number) — параметр сглаживания движения (Linear
interpolation).Все эти параметры управляют интерфейсом прокрутки и поведением элементов, влияя на чувствительность и плавность.
Locomotive Scroll предоставляет встроенные события, которые возвращают объекты с данными о состоянии скролла:
scroll.on('scroll', (instance) => {
console.log(instance.scroll.y);
});
Типы данных в событиях:
instance.scroll.x / instance.scroll.y —
координаты скролла (Number).instance.direction — направление движения
('up' | 'down' | 'left' | 'right').instance.speed — текущая скорость прокрутки
(Number).instance.limit — максимальное значение скролла по
выбранной оси (Number).Эти данные можно использовать для синхронизации анимаций и динамического управления классами CSS.
Для реализации параллакса и триггеров Locomotive Scroll использует data-атрибуты:
Параллакс
Липкий блок
Ключевые атрибуты:
data-scroll — базовый атрибут для отслеживания
элемента.data-scroll-speed (Number) — скорость движения элемента
относительно прокрутки.data-scroll-direction
('horizontal' | 'vertical') — направление движения
элемента.data-scroll-sticky (Boolean) — фиксирование элемента
относительно родителя.data-scroll-target (Selector) — элемент, к которому
привязывается эффект.Каждое из этих свойств обрабатывается библиотекой как числовой, булевый или строковый тип данных, позволяющий динамически управлять визуальными эффектами.
Locomotive Scroll предоставляет методы для программного управления:
update() — пересчитывает размеры и позиции
элементов.start() / stop() — запуск и остановка
прокрутки.scrollTo(target, options) — программная прокрутка к
элементу или позиции.Пример использования метода scrollTo:
scroll.scrollTo('#section', {
offset: -100,
duration: 1200,
easing: [0.25, 0.00, 0.35, 1.00]
});
Аргументы метода scrollTo:
target — HTMLElement, селектор или координата
(Number).offset — смещение относительно целевой позиции
(Number).duration — время анимации в миллисекундах
(Number).easing — кривая анимации в формате массива (Array of
Numbers).Все значения строго типизированы, что позволяет контролировать точность движения и синхронизацию эффектов.
Объект ScrollInstance представляет текущее состояние
прокрутки:
const instance = scroll.instance;
console.log(instance.scroll.y);
console.log(instance.limit.y);
Структура объекта:
instance = {
scroll: { x: Number, y: Number },
limit: { x: Number, y: Number },
direction: 'up' | 'down' | 'left' | 'right',
speed: Number
}
Все свойства являются только для чтения, обеспечивая консистентность данных при работе с визуальными эффектами.
Каждый DOM-элемент с атрибутами data-scroll получает
интерфейс ScrollElement через внутренние коллекции
библиотеки:
scroll.on('call', (value, way, obj) => {
console.log(obj.el); // HTMLElement
console.log(value); // Значение data-scroll-call
});
Свойства объекта:
el — сам элемент (HTMLElement).speed — скорость движения (Number).direction — направление движения (String).inView — булевый флаг нахождения элемента в видимой
области.Эти интерфейсы позволяют строить связь между DOM и логикой анимации, обрабатывая каждый элемент отдельно или в группах.
Locomotive Scroll использует data-driven подход, где параметры элементов задаются через HTML-атрибуты, а не только через JS. Это создает интерфейс сильной типизации и декларативности, позволяющий:
string).Такая архитектура обеспечивает гибкость и простоту интеграции с другими библиотеками анимации.
Несмотря на динамическую природу JavaScript, Locomotive Scroll строго ожидает конкретные типы данных:
| Свойство / Метод | Тип данных | Описание |
|---|---|---|
el |
HTMLElement | Контейнер прокрутки |
smooth |
Boolean | Включение плавной прокрутки |
direction |
String | 'vertical' или 'horizontal' |
multiplier |
Number | Множитель скорости |
lerp |
Number | Сглаживание анимации |
scrollTo.offset |
Number | Смещение целевой позиции |
scrollTo.duration |
Number | Длительность анимации |
scrollTo.easing |
Array[Number] | Кривая анимации |
data-scroll-speed |
Number | Скорость параллакса элемента |
data-scroll-sticky |
Boolean | Липкий элемент |
instance.scroll |
Object | Координаты скролла |
instance.limit |
Object | Максимальные значения скролла |
instance.direction |
String | Направление движения |
instance.speed |
Number | Скорость прокрутки |
Строгое соблюдение типов предотвращает ошибки анимации и обеспечивает согласованность данных между JS и DOM.