ScrollMagic позволяет управлять анимацией элементов страницы в зависимости от прокрутки. Один из самых востребованных эффектов — параллакс фона, при котором фон движется с другой скоростью относительно контента, создавая ощущение глубины.
Для реализации параллакса необходимо создать сцену
(Scene) и связать её с элементом DOM, фоновое движение
которого будет контролироваться. Базовый пример структуры сцены:
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#section1", // Элемент, при достижении которого начинается анимация
duration: "200%", // Длительность эффекта параллакса
triggerHook: 0 // Начало анимации при верхней границе viewport
})
.setTween("#section1 .background", {y: "50%", ease: Linear.easeNone}) // анимация фона
.addTo(controller);
triggerElement — элемент, который запускает анимацию
при его попадании в viewport.duration — длина сцены, определяющая диапазон
прокрутки, в течение которого будет происходить эффект.triggerHook — точка запуска анимации относительно
viewport (0 — верх, 1 — низ, 0.5 — середина).setTween — связывает сцену с анимацией, управляемой
библиотекой GSAP или CSS свойствами.Скорость движения фона регулируется через величину смещения по оси Y или X. Например:
.setTween("#section1 .background", {y: "-30%", ease: Linear.easeNone});
Отрицательные значения создают движение фона вверх при прокрутке вниз, положительные — вниз. Важно использовать Linear.easeNone, чтобы анимация была равномерной, без ускорений и замедлений.
Параллакс часто требует разных слоёв с разной скоростью:
var scene1 = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "150%"
})
.setTween("#layer1", {y: "20%", ease: Linear.easeNone})
.addTo(controller);
var scene2 = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "150%"
})
.setTween("#layer2", {y: "40%", ease: Linear.easeNone})
.addTo(controller);
Так создаётся эффект глубины: ближний слой движется быстрее, дальний — медленнее.
pin для закрепления секцийИногда требуется закрепить блок с фоном, чтобы контент прокручивался поверх него:
new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "100%",
triggerHook: 0
})
.setPin("#section1") // фиксируем элемент
.addTo(controller);
setPin удерживает элемент на экране на протяжении всей
сцены, позволяя создавать слоистые параллакс-эффекты с динамическим
контентом.
Для сложных параллакс-анимаций предпочтительно использовать GSAP. Это позволяет плавно менять свойства фона, прозрачность, масштаб и даже трансформации 3D:
var tween = gsap.timeline()
.to("#bg1", {y: "50%", scale: 1.1, ease: "none"})
.to("#bg2", {y: "30%", scale: 1.05, ease: "none"}, 0);
new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "200%"
})
.setTween(tween)
.addTo(controller);
Использование timeline даёт возможность синхронизировать
несколько элементов с разными параметрами движения, создавая эффект
многослойного параллакса.
var controller = new ScrollMagic.Controller();
gsap.to("#background", {
y: "40%",
ease: "none",
scrollTrigger: {
trigger: "#section1",
start: "top top",
end: "bottom top",
scrub: true
}
});
new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "100%",
})
.setPin("#content") // фиксируем текст поверх фона
.addTo(controller);
Так создаётся эффект, когда фон плавно движется, а текст остаётся читаемым поверх него, усиливая визуальное восприятие глубины.
Этот подход позволяет комбинировать ScrollMagic и GSAP, создавая динамичные, плавные и профессиональные параллакс-эффекты.