Для начала работы с Locomotive Scroll необходимо подключить библиотеку к проекту. Существует несколько способов: через npm/yarn или подключением через CDN.
Установка через npm:
npm install locomotive-scroll
Подключение через CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/locomotive-scroll@4.1.4/dist/locomotive-scroll.css">
<script src="https://cdn.jsdelivr.net/npm/locomotive-scroll@4.1.4/dist/locomotive-scroll.min.js"></script>
После подключения важно добавить контейнер с атрибутом
data-scroll-container, внутри которого будут находиться все
элементы, участвующие в плавной прокрутке.
<div data-scroll-container>
<section data-scroll-section>
<!-- Контент портфолио -->
</section>
</div>
Создание экземпляра Locomotive Scroll выполняется через конструктор
LocomotiveScroll. Основные параметры:
el — элемент-контейнер для скролла.smooth — включает плавный скролл.getDirection — отслеживание направления прокрутки.getSpeed — отслеживание скорости прокрутки.Пример инициализации:
import LocomotiveScroll from "locomotive-scroll";
const scroll = new LocomotiveScroll({
el: document.querySelector("[data-scroll-container]"),
smooth: true,
getDirection: true,
getSpeed: true
});
Применяется к элементам, которые должны анимироваться или фиксироваться в момент прокрутки.
data-scroll-speed — скорость движения элемента
относительно скролла. Значение 1 соответствует нормальной
скорости, отрицательные значения создают эффект движения в обратную
сторону.data-scroll-delay — задержка анимации.data-scroll-repeat — повтор анимации при повторном
появлении элемента на экране.data-scroll-position — позиция отслеживания элемента
(top, bottom, middle).<div data-scroll data-scroll-speed="2">
Проект с ускоренным скроллом
</div>
Позволяет разделять контент на независимые секции, каждая из которых может иметь отдельные эффекты.
<section data-scroll-section>
<h2 data-scroll data-scroll-speed="1.5">Проект 1</h2>
</section>
<section data-scroll-section>
<h2 data-scroll data-scroll-speed="1.2">Проект 2</h2>
</section>
Фиксирует элемент на экране на протяжении определенной секции.
Работает вместе с data-scroll-target, указывающим
контейнер, относительно которого фиксировать элемент.
<div data-scroll data-scroll-sticky data-scroll-target="#portfolio">
Фиксированная панель
</div>
Locomotive Scroll тесно интегрируется с CSS-анимациями и библиотеками типа GSAP. Основная идея — использование данных о скролле для триггера анимаций.
Пример плавного появления блока:
.fade-in {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
[data-scroll].is-inview .fade-in {
opacity: 1;
transform: translateY(0);
}
В JS добавляется обработка события:
scroll.on("call", (func, dir, el) => {
if(func === "fade") {
el.classList.add("is-inview");
}
});
HTML с вызовом анимации:
<div data-scroll data-scroll-call="fade" class="fade-in">
Контент проекта
</div>
Одним из главных преимуществ Locomotive Scroll является легкое создание параллакса.
data-scroll-speed позволяют создать эффект глубины.data-scroll-delay позволяет синхронизировать появление
элементов.Пример параллакса заголовка:
<h2 data-scroll data-scroll-speed="-1.5">Проект с эффектом параллакса</h2>
Locomotive Scroll поддерживает мобильные устройства, но важно
корректно обрабатывать тач-прокрутку. Для этого можно использовать
параметр smartphone: { smooth: true } и
tablet: { smooth: true }.
const scroll = new LocomotiveScroll({
el: document.querySelector("[data-scroll-container]"),
smooth: true,
smartphone: {
smooth: true
},
tablet: {
smooth: true
}
});
data-scroll-repeat="false" для одноразовых
эффектов.data-scroll-section.В портфолио Locomotive Scroll помогает:
Пример горизонтальной галереи:
<div data-scroll-section>
<div class="horizontal-gallery" data-scroll data-scroll-direction="horizontal">
<img src="project1.jpg" alt="Проект 1">
<img src="project2.jpg" alt="Проект 2">
<img src="project3.jpg" alt="Проект 3">
</div>
</div>
С помощью CSS и JS можно синхронизировать движение галереи с вертикальным скроллом для создания эффекта горизонтального пролистывания.
Эта структура позволяет построить динамичное и современное портфолио, где каждый проект получает визуальное выделение и интерактивность, а пользователи ощущают плавность и глубину прокрутки.