Многослойный параллакс создаётся за счёт различной скорости движения
слоёв относительно прокрутки страницы. В ScrollMagic каждый слой
привязывается к отдельной сцене (Scene), что позволяет
детально управлять анимацией и её синхронизацией.
// Создание контроллера для всех сцен
var controller = new ScrollMagic.Controller();
Контроллер управляет всеми сценами и обеспечивает синхронизацию анимаций с прокруткой страницы.
Каждый слой параллакса реализуется с помощью HTML-элемента, которому присваивается CSS-класс. Например:
<div class="parallax-layer layer-back"></div>
<div class="parallax-layer layer-middle"></div>
<div class="parallax-layer layer-front"></div>
Для анимации используется библиотека GSAP или стандартные CSS-трансформации. В ScrollMagic сцена задаёт момент появления анимации, её длительность и триггер:
var sceneBack = new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "200%", // продолжительность анимации при прокрутке
triggerHook: 0
})
.setTween(".layer-back", {y: "50%", ease: Linear.easeNone})
.addTo(controller);
Ключевые параметры сцены:
triggerElement — элемент, при достижении которого
стартует сцена.duration — длина сцены, на протяжении которой анимация
будет происходить. Можно задавать в пикселях или процентах от высоты
окна.triggerHook — точка на экране (от 0 до 1), где
срабатывает сцена; 0 — верх экрана, 1 — низ экрана.Для эффекта глубины разные слои движутся с различной скоростью. Чем дальше слой, тем медленнее он перемещается относительно прокрутки:
var sceneMiddle = new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "200%",
triggerHook: 0
})
.setTween(".layer-middle", {y: "30%", ease: Linear.easeNone})
.addTo(controller);
var sceneFront = new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "200%",
triggerHook: 0
})
.setTween(".layer-front", {y: "10%", ease: Linear.easeNone})
.addTo(controller);
Важно: Использовать линейную функцию
Linear.easeNone, чтобы движение было равномерным и не
зависело от скорости прокрутки пользователя.
Можно обойтись и чистым CSS с ScrollMagic. Для этого сцена лишь добавляет класс к элементу:
var scene = new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "100%",
triggerHook: 0.5
})
.setClassToggle(".layer-front", "animate")
.addTo(controller);
В CSS задаётся плавная трансформация:
.layer-front.animate {
transform: translateY(-50%);
transition: transform 0.5s linear;
}
Этот подход полезен для лёгких эффектов без подключения GSAP.
Для полной сцены параллакса можно комбинировать несколько слоёв и анимаций. Например, фон движется медленно, средний слой чуть быстрее, а передний слой — почти синхронно с прокруткой.
var layers = [
{selector: ".layer-back", y: "40%"},
{selector: ".layer-middle", y: "20%"},
{selector: ".layer-front", y: "5%"}
];
layers.forEach(function(layer) {
new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "300%",
triggerHook: 0
})
.setTween(layer.selector, {y: layer.y, ease: Linear.easeNone})
.addTo(controller);
});
Такой подход позволяет масштабировать эффект, добавлять новые слои и настраивать индивидуальные скорости движения.
ScrollMagic позволяет не только задавать движение при прокрутке вниз, но и возвращать слои обратно при прокрутке вверх. Для этого сцена должна быть двусторонней:
var scene = new ScrollMagic.Scene({
triggerElement: "#parallax-container",
duration: "200%",
triggerHook: 0
})
.setTween(".layer-back", {y: "50%", ease: Linear.easeNone})
.reverse(true) // анимация откатывается при скролле вверх
.addTo(controller);
Параметр .reverse(true) обеспечивает
естественный эффект возврата слоёв, создавая ощущение объёмного
пространства.
Параллакс можно совмещать с анимациями объектов внутри слоёв.
Например, текст или изображения могут появляться, увеличиваться или
вращаться во время прокрутки. Это делается через
.setTween() или .setClassToggle() для
отдельного элемента, что даёт гибкость в управлении эффектами.
new ScrollMagic.Scene({
triggerElement: ".layer-front",
duration: "100%",
triggerHook: 0.8
})
.setTween(".layer-front .title", {opacity: 1, y: 0, ease: Linear.easeNone})
.addTo(controller);
transform вместо top/left для плавного
GPU-ускоренного движения.controller для всех слоёв.Многослойный параллакс с ScrollMagic — мощный инструмент для создания глубины и динамики страницы, позволяющий тонко управлять движением каждого слоя и синхронизацией эффектов с прокруткой.