Locomotive Scroll — это библиотека, обеспечивающая плавную анимацию прокрутки и управление событиями скролла на странице. Одним из ключевых преимуществ является возможность плавного перехода к конкретному элементу, что особенно важно для одностраничных сайтов, лендингов и интерактивных интерфейсов.
Перед тем как использовать методы прокрутки к элементу, необходимо корректно инициализировать библиотеку:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('#scroll-container'),
smooth: true,
multiplier: 1.0,
class: 'is-reveal'
});
Пояснение ключевых параметров:
el — контейнер, внутри которого будет происходить
скролл. Обычно это обёртка всего контента.smooth — включает плавную прокрутку.multiplier — коэффициент скорости скролла. Значение 1 —
стандартная скорость.class — CSS-класс, который Locomotive Scroll добавляет
к элементам при их появлении в области видимости.Locomotive Scroll предоставляет метод scrollTo, который
позволяет перемещаться к конкретному элементу:
scroll.scrollTo('#target-element', {
offset: -100,
duration: 1500,
easing: [0.25, 0.00, 0.35, 1.00]
});
Параметры метода scrollTo:
target — CSS-селектор или DOM-элемент, к которому будет
осуществлена прокрутка.offset — смещение относительно верхней границы
контейнера. Полезно, если нужно учитывать фиксированное меню.duration — длительность анимации в миллисекундах.easing — массив из четырёх чисел, задающих кривую Безье
для анимации, что позволяет гибко контролировать скорость движения.Метод scrollTo также поддерживает прокрутку к конкретным
координатам внутри контейнера:
scroll.scrollTo(500, {
duration: 1200,
easing: 'easeInOutQuad'
});
Особенности:
'top' или
'bottom' для быстрого позиционирования.Для интерактивных интерфейсов часто требуется прокрутка при клике на кнопку или ссылку:
document.querySelector('#btn-scroll').addEventListener('click', () => {
scroll.scrollTo('#section-3', { offset: -50, duration: 1000 });
});
Рекомендации:
offset для корректного учета фиксированных
элементов.duration и easing в
зависимости от расстояния до цели, чтобы движение выглядело
естественно.Если элементы добавляются в DOM после инициализации Locomotive Scroll, необходимо обновлять скролл:
scroll.update();
Это гарантирует, что библиотека корректно учитывает новые элементы и позволяет плавно прокручивать к ним.
Для сайтов с навигацией через якоря можно реализовать плавную прокрутку следующим образом:
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function(e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
scroll.scrollTo(target, { offset: -80, duration: 1200 });
});
});
Особенности подхода:
e.preventDefault()), чтобы избежать резкого скачка.offset для корректного позиционирования с
учетом шапки сайта.Locomotive Scroll поддерживает горизонтальную прокрутку. Для прокрутки к элементу по горизонтали:
scroll.scrollTo('#horizontal-target', {
offset: 0,
duration: 1000,
easing: [0.42, 0, 0.58, 1],
horizontal: true
});
horizontal: true переключает метод на работу с
осью X.offset, duration,
easing) работают аналогично вертикальной прокрутке.scroll.scrollTo('#target', {
duration: 800,
callback: () => console.log('Прокрутка завершена')
});
Комбинация с анимациями: Locomotive Scroll хорошо интегрируется с библиотеками типа GSAP, позволяя запускать анимации по завершении прокрутки к элементу.
Плавная подстройка под размеры: при изменении
размеров окна или ориентации устройства рекомендуется вызывать
scroll.update() для точного позиционирования.
Плавная прокрутка к элементу с Locomotive Scroll обеспечивает высокую интерактивность и удобство навигации, позволяя управлять скоростью, смещением и кривой анимации, а также интегрировать функционал с динамическим контентом и горизонтальными секциями.