Для корректной работы Locomotive Scroll необходимо правильно
инициализировать скролл и настроить контейнер. Основной контейнер должен
иметь атрибут data-scroll-container, а его содержимое —
корректно структурированное. Пример базовой инициализации:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1.0,
class: 'is-revealed',
});
Ключевые параметры:
Важно учитывать, что для мобильных устройств может понадобиться
отдельная конфигурация smartphone и tablet с
параметром smooth.
Частая ошибка — некорректное определение высоты контейнера. Locomotive Scroll рассчитывает скролл на основе размеров контейнера. Если контейнер не растягивается на всю высоту контента, появляются «обрезанные» скроллы. Решения:
[data-scroll-container] {
min-height: 100vh;
overflow: hidden;
position: relative;
}
scroll.update();
На iOS и Android плавный скролл иногда «подтормаживает» или не работает. Основные причины:
smooth на мобильных
устройствах. Решение: использовать условную инициализацию:const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: window.innerWidth > 1024,
});
position: fixed внутри
контейнера. Элементы с фиксированным позиционированием
конфликтуют со скроллом. Выход: применять
data-scroll-sticky и обертывать элемент в родительский
контейнер.Locomotive Scroll поддерживает анимацию через
data-scroll и data-scroll-speed. Часто
возникает ситуация, когда анимация не запускается. Основные причины:
scroll.update() после динамической загрузки контента.<div data-scroll data-scroll-speed="2">Текст</div>
scrollTrigger).Locomotive Scroll позволяет подписываться на события:
scroll — срабатывает при любом движении скролла;call — триггерит функцию при достижении определённого
элемента;Пример использования:
scroll.on('scroll', (obj) => {
console.log(obj.scroll.y);
});
scroll.on('call', (func, way, obj) => {
if(func === 'animate') {
// логика анимации
}
});
Типичная ошибка — неправильное связывание событий с DOM-элементами,
которые ещё не загружены. Решение: инициализировать скролл после полной
загрузки DOM или использовать DOMContentLoaded.
Locomotive Scroll применяет transform: translate3d для
контейнера. Если другие элементы используют трансформации на
родительском уровне, возникает визуальное смещение. Основные
рекомендации:
transform к
data-scroll-container или его непосредственным
родителям.data-scroll-direction="horizontal".Пример:
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
direction: 'horizontal',
smooth: true,
});
Если контент добавляется после инициализации, без обновления скролла элементы могут не появляться в расчетах. Алгоритм решения:
scroll.update();
data-scroll и
при необходимости повторно активировать обработчики событий.Проблемы с производительностью возникают при большом количестве
элементов с атрибутами data-scroll. Методы оптимизации:
scroll.update() только при
необходимости.data-scroll-speed для тяжелых
элементов.smooth на мобильных устройствах и для слабых
устройств.Часто Locomotive Scroll конфликтует с:
ScrollTrigger с опцией scroller.Пример интеграции с GSAP:
gsap.registerPlugin(ScrollTrigger);
ScrollTrigger.scrollerProxy("[data-scroll-container]", {
scrollTop(value) {
return arguments.length ? scroll.scrollTo(value, 0, 0) : scroll.scroll.instance.scroll.y;
},
getBoundingClientRect() {
return {top: 0, left: 0, width: window.innerWidth, height: window.innerHeight};
},
});
Эти решения покрывают большинство типичных проблем при работе с Locomotive Scroll и обеспечивают корректное отображение, плавность и предсказуемое поведение скролла на всех устройствах.