Для реализации прокрутки к конкретной позиции с помощью Locomotive
Scroll необходимо сначала создать экземпляр библиотеки и настроить
контейнер. Обычно контейнером выступает основной блок страницы с
атрибутом data-scroll-container:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1,
});
Параметр smooth: true обеспечивает плавную анимацию
прокрутки, а multiplier регулирует скорость движения. Без
правильной инициализации прокрутка к позиции работать не будет.
Locomotive Scroll предоставляет встроенный метод
scrollTo, который позволяет перемещать страницу к
конкретной точке:
scroll.scrollTo(target, options);
target может быть:
'top' или 'bottom' — начало или конец
страницы.options — объект с настройками анимации:
offset — смещение в пикселях от выбранной позиции.duration — время анимации в миллисекундах.easing — функция плавности, например
'easeInOutQuad'.Пример прокрутки к элементу с идентификатором #section2
с небольшим смещением:
scroll.scrollTo('#section2', {
offset: -100,
duration: 1200,
easing: 'easeInOutCubic',
});
Если требуется прокрутка к конкретной позиции по оси Y или X, можно использовать числовые значения. Например, перемещение на 500 пикселей вниз:
scroll.scrollTo(500, {
duration: 1000,
easing: 'easeOutQuad',
});
При этом 0 соответствует верхней границе контейнера, а
отрицательные значения учитываются как прокрутка выше начала.
Иногда необходимо прокручивать страницу к элементу, который создаётся
динамически или определяется через вычисления. В таких случаях можно
использовать метод querySelector или
getBoundingClientRect:
const dynamicElement = document.querySelector('.dynamic-target');
scroll.scrollTo(dynamicElement, {
offset: -50,
duration: 800,
});
Использование DOM-элементов обеспечивает точную позицию даже при изменении высоты контента или адаптивной верстке.
Прокрутка к позиции часто привязывается к событиям: клику на ссылку, загрузке страницы или срабатыванию таймера.
document.querySelector('.scroll-button').addEventListener('click', () => {
scroll.scrollTo('#target-section', {
offset: -80,
duration: 1000,
easing: 'easeInOutQuart',
});
});
Поддерживаются также кастомные события, например, при смене вкладки или открытии модального окна. Это делает библиотеку удобной для интерактивных интерфейсов.
Если на странице присутствуют фиксированные элементы, такие как шапка
или панель навигации, необходимо корректировать offset.
Отрицательное значение сдвига позволит прокрутить контент ниже
фиксированного блока, чтобы элемент оказался полностью видимым:
scroll.scrollTo('#section', { offset: -70, duration: 900 });
Locomotive Scroll поддерживает стандартные easing-функции, такие как:
'linear' — равномерная скорость.'easeInQuad', 'easeOutQuad',
'easeInOutQuad' — ускорение и замедление.'easeInCubic', 'easeOutCubic',
'easeInOutCubic' — более плавные кривые движения.Применение правильной функции easing улучшает восприятие интерфейса и создаёт ощущение естественной прокрутки.
Для запуска дополнительных действий после завершения анимации
используется callback через promise или событие
call:
scroll.scrollTo('#section', {
offset: -50,
duration: 1000,
easing: 'easeInOutCubic',
}).then(() => {
console.log('Прокрутка завершена');
});
Это позволяет синхронизировать анимацию элементов с прокруткой, например запускать fade-in или трансформации блоков.
const sections = document.querySelectorAll('.section');
sections.forEach((section, index) => {
section.addEventListener('mouseenter', () => {
scroll.scrollTo(section, {
offset: -60,
duration: 700 + index * 100,
easing: 'easeInOutQuad',
});
});
});
const topOffset = document.querySelector('.header').offsetHeight;
scroll.scrollTo(1200, {
offset: -topOffset,
duration: 1200,
easing: 'easeOutCubic',
});
scroll.scrollTo('#animate-section', { duration: 1000 }).then(() => {
document.querySelector('#animate-section .box').classList.add('active');
});
Эти приёмы позволяют строить сложные интерактивные интерфейсы с точным контролем движения и синхронизации элементов.