Locomotive Scroll активно развивается, и с каждой новой версией появляются изменения, которые могут нарушить работу существующего кода. Раздел breaking changes особенно важен при обновлении библиотеки, так как позволяет заранее подготовить проект к новым требованиям и избежать неожиданных ошибок.
В последних версиях некоторые ключевые параметры инициализации были удалены или переименованы. Основные моменты:
el Ранее основной контейнер для
скролла задавался через
el: document.querySelector('#scroll'). Сейчас
поддерживается только прямое DOM-узловое значение, без возможности
передавать селектор в виде строки. Передача строки вызовет
ошибку.
smoothMobile Параметр, отвечавший
за плавность скролла на мобильных устройствах, был удалён. Все мобильные
устройства теперь используют плавный скролл автоматически или полное
отключение через smooth: false.
getDirection и
getSpeed Методы, возвращавшие направление и
скорость прокрутки, переехали из публичного API в приватный внутренний
функционал. Использование scroll.getDirection() или
scroll.getSpeed() больше не поддерживается и приведёт к
ошибке.
Locomotive Scroll активно использует события для отслеживания прокрутки. В новых версиях произошли следующие изменения:
Событие call Ранее
call срабатывал на каждом кадре для элементов с
data-scroll-call. Сейчас оно срабатывает только при
входе элемента в видимую область и при выходе из неё.
Для старой логики придётся использовать кастомные события через
Intersection Observer.
Удаление события scroll на инстансе
В старых версиях можно было подписываться на событие:
scroll.on('scroll', (obj) => console.log(obj.scroll.y));
Теперь событие scroll больше не существует. Для
получения текущей позиции прокрутки нужно использовать
scroll.scroll.instance.scroll.y в комбинации с
requestAnimationFrame.
Некоторые методы были полностью удалены или заменены:
update() Ранее метод использовался
для ручного обновления состояния скролла после изменения DOM. Сейчас
update() остался, но его поведение изменено: он обновляет
только позиции элементов с data-scroll, а не весь
инстанс. Для полной переработки структуры DOM требуется теперь
уничтожать и пересоздавать инстанс:
scroll.destroy();
scroll = new LocomotiveScroll({ el: container, smooth: true });destroy() Метод полностью очищает
все обработчики событий и сбрасывает стили. В старых версиях
destroy() оставлял контейнер с позиционированием
fixed; теперь все стили сбрасываются корректно, что может
повлиять на кастомные анимации.
start() и stop() Эти
методы больше не контролируют плавность скролла. Их использование теперь
ограничено внутренними оптимизациями, а для приостановки скролла
необходимо использовать:
scroll.stop(); // Приостанавливает скролл
scroll.start(); // Возобновляет скролл
Но важно учитывать, что все кастомные анимации должны быть синхронизированы вручную.
mobile и tablet опции
Параметры конфигурации mobile: { breakpoint, smooth } и
tablet: { breakpoint, smooth } были заменены на единый
параметр smartphone и tablet. Старый формат
больше не поддерживается и вызовет ошибку при инициализации.
Изменение поведения touch-событий Прокрутка
теперь использует passive listeners по умолчанию, что
улучшает производительность, но может нарушить логику кастомных
обработчиков touchstart/touchmove. Для
совместимости требуется вручную отменять passive:
document.addEventListener('touchmove', handler, { passive: false });data-scroll-speed и
data-scroll-delay Поведение этих атрибутов
изменилось: скорость теперь считается относительно текущего контейнера с
учетом его позиции, а не глобального документа. При обновлении проекта
старые анимации могут выглядеть иначе.
data-scroll-repeat Атрибут
повторного триггера больше не работает для элементов, полностью ушедших
из зоны видимости. Элементы повторно активируются только при
частичном пересечении с viewport.
Сброс transform В новых версиях Locomotive
Scroll управляет transform: translate3d() для контейнера и
элементов с data-scroll. Старые кастомные трансформации
могут конфликтовать. Для корректной работы необходимо использовать
will-change: transform и избегать конфликтов с
inline-стилями.
Позиционирование fixed Элементы с
position: fixed внутри контейнера теперь работают корректно
относительно контейнера, а не документа. Старые трюки с
fixed могут требовать переработки CSS.
Эти изменения являются ключевыми для понимания, как адаптировать старый проект под новые версии Locomotive Scroll, избегая ошибок, конфликтов и неожиданных визуальных багов.