При обновлении Locomotive Scroll с версии 3 до версии 4 произошли значительные изменения в архитектуре и API, которые напрямую влияют на инициализацию, работу с событиями и настройки скроллинга. Основное отличие — переход от глобального объекта к модульной структуре с явным импортом, что улучшает Tree Shaking и совместимость с современными сборщиками вроде Webpack и Vite.
Пример импорта в версии 4:
import LocomotiveScroll from 'locomotive-scroll';
Ранее в версии 3 часто использовался глобальный объект
window.LocomotiveScroll, что усложняло контроль за
загрузкой и зависимостями.
В версии 4 инициализация требует указания контейнера и нескольких ключевых опций:
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
direction: 'vertical',
multiplier: 1.0,
smartphone: {
smooth: true
},
tablet: {
smooth: true
}
});
Ключевые моменты:
el — контейнер скролла. Важно, чтобы он был
единственным элементом, внутри которого происходит весь скроллинг.smooth — включает плавный скролл.direction — направление скролла:
'vertical' или 'horizontal'.multiplier — коэффициент скорости прокрутки.smartphone, tablet).Версия 4 полностью переработала систему событий. Методы
on и off остались, но изменился формат
передачи аргументов. Основные события:
scroll — срабатывает при скролле, передает объект с
текущей позицией.call — позволяет слушать кастомные триггеры на
элементах с data-scroll-call.resize — срабатывает при изменении размеров
контейнера.Пример использования события
scroll:
scroll.on('scroll', (args) => {
console.log(args.scroll.y); // текущая вертикальная позиция
console.log(args.scroll.direction); // направление прокрутки
});
В версии 4 изменились названия и структура data-атрибутов для элементов с анимацией:
| Версия 3 | Версия 4 | Комментарий |
|---|---|---|
data-scroll-speed |
data-scroll-speed |
Осталось без изменений |
data-scroll-offset |
data-scroll-offset |
Теперь поддерживает массив [top, bottom] |
data-scroll-call |
data-scroll-call |
Используется с событиями call |
Важно отметить, что теперь анимации лучше работают с
IntersectionObserver, что снижает нагрузку на основной
поток.
Инициализация до загрузки DOM В версии 4
LocomotiveScroll нельзя инициализировать до полной загрузки
контейнера. Рекомендуется использовать:
window.addEventListener('DOMContentLoaded', () => {
const scroll = new LocomotiveScroll({ el: document.querySelector('[data-scroll-container]'), smooth: true });
});Плавный скролл на мобильных устройствах В версии
4 плавный скролл на iOS и Android стал более стабильным, но требуется
явная настройка smartphone.smooth и
tablet.smooth.
Методы обновления Ранее использовался
update(), теперь рекомендуется scroll.update()
после изменения DOM:
scroll.update();Удаление скролла Метод destroy()
очищает события и сбрасывает стили контейнера:
scroll.destroy();Если в версии 3 использовались кастомные параллакс-эффекты через
transform: translateY(), в версии 4 рекомендуется
использовать встроенные опции data-scroll-speed и
data-scroll-direction. Для сложных эффектов можно
подключать сторонние анимационные библиотеки вроде GSAP совместно с
событиями scroll или call.
Пример параллакса с GSAP:
scroll.on('scroll', ({ scroll }) => {
gsap.to('.parallax', {
y: scroll.y * 0.3,
ease: 'power1.out'
});
});
Версия 4 уделяет больше внимания производительности:
transform и opacity.