Locomotive Scroll — это мощная библиотека для плавного скроллинга с поддержкой параллакса и анимаций, но в некоторых случаях требуется отключить её функционал на определённых устройствах или при определённых условиях. Например, на мобильных устройствах с низкой производительностью или при использовании сторонних скриптов, которые конфликтуют с виртуальным скроллом.
Для условного отключения скролла необходимо определить тип устройства. Наиболее надёжный способ — проверка ширины окна или использование пользовательских агентов. Пример:
const isMobile = /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (isMobile) {
// отключаем Locomotive Scroll
} else {
// инициализация Locomotive Scroll для десктопа
}
Вместо проверки userAgent можно использовать
медиазапросы через window.matchMedia:
const isMobile = window.matchMedia("(max-width: 768px)").matches;
Такой подход обеспечивает гибкость, особенно при адаптивном дизайне, когда границы устройств могут быть изменены по проекту.
reloadOnContextChangeLocomotive Scroll имеет возможность динамически управлять перерисовкой и обновлением скролла. Если необходимо полностью отключить скролл на мобильных устройствах, можно использовать условную инициализацию:
import LocomotiveScroll from 'locomotive-scroll';
let scrollInstance;
if (!isMobile) {
scrollInstance = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: true,
multiplier: 1.0,
class: 'is-reveal'
});
}
Если скролл уже был инициализирован, но нужно его деактивировать при
смене устройства или ориентации, используется метод
destroy:
if (scrollInstance) {
scrollInstance.destroy();
}
Метод destroy удаляет все обработчики событий и
восстанавливает стандартный нативный скролл, предотвращая конфликт с
другими элементами страницы.
Locomotive Scroll тесно интегрируется с анимациями через атрибуты
data-scroll и data-scroll-speed. При
отключении скролла на мобильных устройствах важно предусмотреть
fallback-анимации или их полное скрытие:
const scrollElements = document.querySelectorAll('[data-scroll]');
if (isMobile) {
scrollElements.forEach(el => {
el.removeAttribute('data-scroll');
el.removeAttribute('data-scroll-speed');
});
}
Такой подход предотвращает наложение эффектов на нативный скролл, которые могут вызвать дергание или некорректное отображение контента.
Если пользователи изменяют ориентацию экрана или размер окна
браузера, необходимо отслеживать событие resize и включать
или отключать Locomotive Scroll динамически:
window.addEventListener('resize', () => {
const shouldUseScroll = window.innerWidth > 768;
if (shouldUseScroll && !scrollInstance) {
scrollInstance = new LocomotiveScroll({
el: document.querySelector('#js-scroll'),
smooth: true
});
} else if (!shouldUseScroll && scrollInstance) {
scrollInstance.destroy();
scrollInstance = null;
}
});
Такой подход обеспечивает адаптивность и предотвращает ошибки при смене устройства без перезагрузки страницы.
destroy() — отключает скролл
полностью, восстанавливая нативный.update() — обновляет позицию и размеры
элементов после изменений DOM.scrollTo(target, options) — позволяет
перемещать скролл программно; при отключении скролла вызовы следует
игнорировать.reloadOnContextChange: true —
обновляет скролл при изменении размеров элементов или
медиазапросов.userAgent для
определения необходимости отключения.data-scroll на мобильных
устройствах, чтобы предотвратить конфликт с нативным скроллом.smooth: false,
что включит нативный скролл, но сохранит некоторые возможности
библиотеки.Такой подход обеспечивает полное и безопасное отключение Locomotive Scroll на разных устройствах без потери стабильности сайта и пользовательского опыта.