ScrollMagic — это библиотека для управления анимацией и поведением элементов на странице в зависимости от прокрутки. Она позволяет создавать сложные эффекты, такие как параллакс, появление элементов по скроллу, закрепление блоков и синхронизацию анимации с движением страницы. Основные элементы библиотеки:
// Создание контроллера
var controller = new ScrollMagic.Controller();
// Создание сцены
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // Элемент, с которого начинается сцена
duration: 300, // Длина сцены в пикселях
offset: 50 // Смещение начала сцены
})
.setTween("#animate", {opacity: 1, y: 100}) // Анимация с помощью GSAP
.addIndicators({name: "fade scene"}) // Включение индикаторов
.addTo(controller); // Добавление сцены в контроллер
ScrollMagic не создаёт анимации напрямую, а интегрируется с библиотеками вроде GSAP или Velocity.js. Основная задача ScrollMagic — синхронизация анимации с прокруткой страницы.
var tween = gsap.to("#animate", {duration: 1, x: 200, opacity: 0.5});
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 500
})
.setTween(tween)
.addTo(controller);
Pinning позволяет фиксировать элемент на экране во время прокрутки сцены.
var scene = new ScrollMagic.Scene({
triggerElement: "#pin",
duration: 400
})
.setPin("#pin")
.addTo(controller);
Ключевой момент: Pinning часто используется вместе с параллаксом, чтобы создать впечатление движения слоёв при скролле.
Сцены можно объединять для комплексного управления анимацией:
var scene1 = new ScrollMagic.Scene({triggerElement: "#one"}).setClassToggle("#box1", "active");
var scene2 = new ScrollMagic.Scene({triggerElement: "#two"}).setClassToggle("#box2", "active");
controller.addScene([scene1, scene2]);
ScrollMagic позволяет отслеживать события сцены:
scene.on("enter", function () {
console.log("Элемент вошёл в зону видимости");
});
scene.on("leave", function () {
console.log("Элемент покинул зону видимости");
});
triggerElement — элемент, от которого считается начало
сцены.offset — смещение в пикселях.duration — длина сцены, может быть числом или функцией,
вычисляющей длину динамически.var dynamicScene = new ScrollMagic.Scene({
triggerElement: "#dynamic",
duration: function() { return document.querySelector("#dynamic").offsetHeight; }
});
ScrollMagic зависит от GSAP или Velocity.js для анимаций. Безопасные зависимости включают:
package.json и использование
фиксированных версий.npm audit или yarn audit."dependencies": {
"scrollmagic": "2.0.8",
"gsap": "3.13.1"
}
В React создаются сцены внутри эффекта useEffect для
корректного управления жизненным циклом:
import { useEffect } from "react";
import ScrollMagic from "scrollmagic";
import { gsap } from "gsap";
function App() {
useEffect(() => {
const controller = new ScrollMagic.Controller();
const tween = gsap.to("#box", {x: 100, opacity: 0.5});
new ScrollMagic.Scene({triggerElement: "#trigger", duration: 300})
.setTween(tween)
.addTo(controller);
return () => controller.destroy();
}, []);
return (
<div>
<div id="trigger">Trigger</div>
<div id="box">Animate Me</div>
</div>
);
}
В Vue сцены создаются после рендеринга DOM:
mounted() {
const controller = new ScrollMagic.Controller();
const tween = gsap.to(this.$refs.box, {y: 200, opacity: 0.7});
new ScrollMagic.Scene({triggerElement: this.$refs.trigger, duration: 400})
.setTween(tween)
.addTo(controller);
}
Использование ScrollMagic совместно с фреймворками позволяет создавать сложные, отзывчивые и безопасные анимации, управляемые прокруткой, без прямого вмешательства в жизненный цикл компонентов.
.setClassToggle() вместо Tween для лёгких
изменений стилей.