Locomotive Scroll позволяет создавать сложные эффекты параллакса и
многослойной прокрутки, управляя скоростью и положением элементов на
странице относительно скролла. Ключевым моментом является использование
атрибутов data-scroll и data-scroll-speed,
которые задают поведение элементов:
Быстро двигающийся слой
Медленно двигающийся слой
data-scroll-speed ускоряют движение элемента
относительно прокрутки.Элементы с разными скоростями можно накладывать друг на друга для создания эффекта многослойной перспективы.
Для сложной сцены с несколькими слоями необходимо учитывать
порядок слоев и их контекст. Каждый слой должен быть
обернут в контейнер с атрибутом data-scroll-container:
layer-back двигается медленнее, создавая эффект
глубины.layer-front ускоряет движение, усиливая ощущение
динамики.Locomotive Scroll поддерживает горизонтальный скролл через установку
атрибута data-direction="horizontal" на контейнере:
Слой 1
Слой 2
Для динамичных эффектов многослойной сцены часто используются
библиотеки анимации, такие как GSAP, в связке с Locomotive Scroll.
Синхронизация достигается через событие
scroll, предоставляемое Locomotive Scroll:
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true
});
scroll.on('scroll', (obj) => {
gsap.to('.animated-layer', {
y: obj.scroll.y * 0.5,
rotation: obj.scroll.y * 0.1
});
});
obj.scroll.y предоставляет текущую позицию скролла,
которую можно использовать для сложных трансформаций.requestAnimationFrame внутри
обработчика позволяет избежать лагов при тяжелых сценах с множеством
слоев.Атрибуты data-scroll-call и
data-scroll-repeat позволяют запускать анимации при
попадании элемента в область видимости:
Элемент с триггером анимации
scroll.on('call', (func, obj) => {
if(func === 'fadeInLayer') {
gsap.to(obj.el, { opacity: 1, duration: 1 });
}
});
data-scroll-repeat повторяет анимацию при повторном
скролле, создавая эффект «живой» сцены.Сложные многослойные эффекты могут сильно нагружать браузер. Основные подходы к оптимизации:
transform: translate3d(0,0,0) для слоев, чтобы GPU выполнял
анимацию.Для создания эффекта «слоистого окна» можно комбинировать CSS
clip-path с атрибутами прокрутки:
.layer-mask {
clip-path: polygon(0 0, 100% 0, 100% 80%, 0 100%);
}
Фон + текст + интерактивные объекты
Вертикальные и горизонтальные слои одновременно
data-direction="vertical"data-direction="horizontal" Такой подход дает эффект
«панорамирования» при скролле.Слой с триггерной анимацией