ScrollMagic не предоставляет встроенного механизма для анимации
свойств напрямую. Для этого обычно используется совместно с библиотекой
GSAP (GreenSock Animation Platform). Твины (tweens)
позволяют создавать плавные анимации свойств элементов, которые
запускаются и управляются скроллом. В ScrollMagic твины применяются
через объект TweenMax или TweenLite из GSAP, а
затем связываются с сценой (Scene).
Для работы с твинами необходимо подключить следующие скрипты:
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.8/ScrollMagic.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.8/plugins/animation.gsap.min.js"></script>
gsap.min.js — основной модуль GSAP для создания
анимаций.ScrollMagic.min.js — ядро ScrollMagic.animation.gsap.min.js — плагин, который позволяет
интегрировать твины GSAP в сцены ScrollMagic.Твин создается с помощью gsap.to() или
TweenMax.to() (в зависимости от версии GSAP). Основные
параметры:
duration сцены, а не
твина).Пример базового твина с GSAP 3:
const tween = gsap.to("#box", {
x: 300,
opacity: 0.5,
duration: 1
});
Твин изменяет положение элемента с id="box" на 300px по
оси X и уменьшает прозрачность до 0.5.
После создания твина необходимо создать сцену, которая будет управлять анимацией при скролле.
const controller = new ScrollMagic.Controller();
const scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, с которого начинается анимация
duration: 500, // длина анимации в пикселях скролла
triggerHook: 0.5 // точка срабатывания (0.5 = середина экрана)
})
.setTween(tween)
.addIndicators({name: "Box Tween"}) // для отладки
.addTo(controller);
Ключевые моменты:
triggerElement — элемент на странице, относительно
которого начинается сцена.duration — сколько пикселей прокрутки соответствует
полной анимации твина.triggerHook — позиция триггера на экране (0 — верх, 1 —
низ, 0.5 — центр).setTween() — связывает твин с сценой.Для сложных последовательных анимаций удобно использовать
Timeline. В GSAP это gsap.timeline().
const timeline = gsap.timeline();
timeline.to("#box", { x: 200, opacity: 1, duration: 1 });
timeline.to("#box", { y: 100, rotation: 45, duration: 1 });
После создания Timeline его также можно привязать к сцене:
const scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 600,
triggerHook: 0.5
})
.setTween(timeline)
.addTo(controller);
Timeline позволяет:
ScrollMagic поддерживает динамическое управление анимацией через события сцены:
scene.on("enter", () => console.log("Сцена началась"));
scene.on("leave", () => console.log("Сцена закончилась"));
scene.on("progress", (event) => console.log("Прогресс:", event.progress));
enter — срабатывает при попадании триггера в зону
triggerHook.leave — срабатывает при выходе сцены из зоны.progress — позволяет отслеживать текущий прогресс твина
(0–1), что полезно для создания интерактивных эффектов.Сцена может быть настроена для обратного проигрывания твина:
scene.reverse(true); // true — твин проигрывается обратно при скролле вверх
Для закрепления элемента на экране используется
setPin():
scene.setPin("#box"); // фиксирует элемент на время сцены
setPin() часто комбинируется с твинами, чтобы создавать
эффекты параллакса или «липких» секций.
transform и opacity вместо
top, left для GPU-ускоренной анимации.Параллакс при скролле:
gsap.to(".background", { y: "-50%", ease: "none" });
new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "100%"
})
.setTween(".background", { y: "-50%", ease: "none" })
.addTo(controller);
Анимация нескольких элементов с задержкой:
const tl = gsap.timeline();
tl.from(".item", { y: 50, opacity: 0, stagger: 0.2, duration: 0.8 });
new ScrollMagic.Scene({
triggerElement: "#list",
duration: 400,
triggerHook: 0.7
})
.setTween(tl)
.addTo(controller);
Stagger позволяет создавать каскадную анимацию нескольких элементов с небольшими задержками между ними.
Эта система твинов в ScrollMagic в сочетании с GSAP открывает широкий спектр возможностей: от простого перемещения элементов до сложных интерактивных анимаций, синхронизированных с прокруткой страницы. Контролируемые через сцены твины позволяют создавать плавные, визуально насыщенные эффекты без перегрузки браузера.