ScrollMagic — это библиотека JavaScript, позволяющая связывать скроллинг страницы с анимациями DOM-элементов. Основная идея заключается в создании сцен (Scenes), которые отслеживают положение элементов относительно окна просмотра и запускают заданные анимации.
Для управления положением элементов чаще всего используется комбинация ScrollMagic и библиотеки GSAP (GreenSock Animation Platform), хотя базовые возможности ScrollMagic позволяют также работать с CSS-свойствами напрямую.
Перед тем как создавать сцены, необходимо инициализировать контроллер:
var controller = new ScrollMagic.Controller();
Контроллер управляет всеми сценами и отслеживает скроллинг страницы. Один контроллер может управлять несколькими сценами, что позволяет создавать сложные анимационные последовательности.
Сцена определяется с помощью конструктора
ScrollMagic.Scene. Основные параметры:
Пример создания сцены:
var scene = new ScrollMagic.Scene({
triggerElement: "#animateMe",
duration: 300,
triggerHook: 0.5
})
.setTween("#animateMe", {y: 100, opacity: 1, duration: 1})
.addTo(controller);
В этом примере:
animateMe будет перемещён по оси Y на 100
пикселей при скролле.triggerHook: 0.5).Для сложной анимации чаще всего применяется метод
.setTween() с объектом GSAP TweenMax или
gsap.to():
var tween = gsap.to("#animateMe", {y: 200, rotation: 45, duration: 1, ease: "power1.out"});
var scene = new ScrollMagic.Scene({
triggerElement: "#animateMe",
duration: 500,
triggerHook: 0.3
})
.setTween(tween)
.addTo(controller);
Особенности:
duration сцены определяет, на каком участке скролла
анимация будет прогрессировать.triggerHook позволяет синхронизировать точку начала
анимации с положением окна.Чтобы позиция элемента изменялась пропорционально
скроллу, используется настройка длительности сцены
(duration). Анимация будет «привязана» к прокрутке:
gsap.to("#box", {
y: 300,
ease: "none",
scrollTrigger: {
trigger: "#box",
start: "top center",
end: "bottom top",
scrub: true
}
});
Пояснение ключевых моментов:
.setTween(),
используя параметр tween вместе с duration
сцены.Для создания эффекта «закрепления» элемента на месте во время скролла
применяется метод .setPin():
var scene = new ScrollMagic.Scene({
triggerElement: "#header",
duration: 400
})
.setPin("#header")
.addTo(controller);
Результат:
#header остаётся на месте на протяжении 400
пикселей скролла.Для комплексных анимаций можно объединять несколько твинов в
TimelineMax:
var timeline = gsap.timeline();
timeline
.to("#box", {y: 200, duration: 1})
.to("#box", {x: 150, rotation: 90, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#box",
duration: 600
})
.setTween(timeline)
.addTo(controller);
Особенности:
Для анимации группы элементов используется селектор и цикл:
document.querySelectorAll(".item").forEach(function(elem) {
var scene = new ScrollMagic.Scene({
triggerElement: elem,
duration: 200,
triggerHook: 0.8
})
.setTween(gsap.from(elem, {opacity: 0, y: 50, duration: 0.5}))
.addTo(controller);
});
Преимущества:
delay) или
последовательностью для эффектов «поочерёдного появления».ScrollMagic позволяет отслеживать события сцены:
Пример:
scene.on("enter", function() {
console.log("Элемент достиг триггера");
});
scene.on("progress", function(event) {
console.log("Прогресс сцены:", event.progress);
});
Это особенно полезно для синхронизации дополнительных эффектов, звуковых сигналов или сложной логики анимации.
Для плавной анимации следует учитывать:
addIndicators() только для отладки, так
как это влияет на рендер.Пример включения индикаторов для отладки:
scene.addIndicators({name: "Box Scene"});
Эти инструменты позволяют создавать богатые, интерактивные эффекты движения элементов, управляемые исключительно скроллом страницы.