ScrollMagic — это библиотека для управления анимациями и взаимодействиями на основе прокрутки страницы. Ключевой концепцией является сцена (Scene) — объект, который отслеживает положение скролла относительно определённого элемента или точки на странице. Сцены можно настраивать так, чтобы они запускали анимации, изменяли CSS-классы или взаимодействовали с другими библиотеками анимации, например, GSAP.
Сцена создаётся с помощью конструктора:
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // Элемент, от которого отсчитывается скролл
duration: 300, // Продолжительность сцены в пикселях скролла
triggerHook: 0.5 // Положение триггера на экране (0 = верх, 1 = низ)
});
triggerElement задаёт точку, от которой начинается сцена, duration определяет, на сколько прокрученных пикселей сцена остаётся активной, а triggerHook — где на экране срабатывает триггер.
Для синхронизации анимаций со скроллом ScrollMagic часто используется вместе с GSAP. Например, плавное изменение прозрачности элемента:
var tween = gsap.to("#animate", {opacity: 1, duration: 1});
scene.setTween(tween)
.addTo(controller);
Здесь setTween связывает сцену с анимацией. Когда пользователь прокручивает страницу, библиотека автоматически синхронизирует прогресс анимации с позицией скролла. Контроллер сцены создаётся так:
var controller = new ScrollMagic.Controller();
Контроллер управляет всеми сценами на странице и обеспечивает корректную синхронизацию при прокрутке.
Каждая сцена имеет свой progress — число от 0 до 1, показывающее, насколько пользователь продвинулся внутри сцены:
scene.on("progress", function(event) {
console.log(event.progress); // Значение от 0 до 1
});
Это позволяет создавать динамические анимации, изменяя свойства объектов пропорционально прогрессу скролла.
ScrollMagic поддерживает автоматическое добавление CSS-классов при достижении сцены:
scene.setClassToggle("#element", "visible")
.addTo(controller);
В момент, когда триггер достигает нужного положения, к элементу добавляется класс visible, а когда сцена заканчивается — класс удаляется. Это удобно для управления стилями без написания анимаций вручную.
Эффекты параллакса создаются путем синхронизации движения элементов с прогрессом скролла:
var tween = gsap.to("#parallax", {y: -200, ease: "none"});
new ScrollMagic.Scene({
triggerElement: "#section",
duration: 500
})
.setTween(tween)
.addTo(controller);
Элемент будет плавно смещаться вверх на 200 пикселей по мере прокрутки сцены. ease: “none” гарантирует линейное движение без замедлений и ускорений, что важно для точного контроля.
На одной странице можно использовать десятки сцен, каждая со своими триггерами и анимациями:
var scene1 = new ScrollMagic.Scene({triggerElement: "#first", duration: 400})
.setTween("#first", {x: 100})
.addTo(controller);
var scene2 = new ScrollMagic.Scene({triggerElement: "#second", duration: 300})
.setTween("#second", {y: 50})
.addTo(controller);
Контроллер объединяет их в единую систему, автоматически синхронизируя анимации независимо друг от друга.
ScrollMagic поддерживает события enter, leave, start, end, которые позволяют запускать функции в ключевых моментах сцены:
scene.on("enter", function() {
console.log("Сцена началась");
});
scene.on("leave", function() {
console.log("Сцена закончилась");
});
Комбинируя эти события с динамическими стилями или вызовами функций, можно создавать сложные интерактивные интерфейсы, полностью контролируемые скроллом.
Для элементов, которые создаются динамически или меняют размер, важно обновлять сцены:
scene.refresh();
Это пересчитывает позиции триггеров и корректно синхронизирует анимации с изменившейся разметкой страницы.
ScrollMagic позволяет работать не только с вертикальной прокруткой. Для горизонтальных эффектов используется настройка контейнера:
var controller = new ScrollMagic.Controller({vertical: false});
Сцены и анимации автоматически будут синхронизироваться с горизонтальным скроллом, что удобно для интерактивных галерей или слайдеров.
scene.setPin("#pinned")
.addTo(controller);
Элемент остаётся на экране, пока пользователь прокручивает сцену.
var timeline = gsap.timeline();
timeline.to("#box", {x: 100})
.to("#box", {y: 50});
scene.setTween(timeline)
.addTo(controller);
scene.on("progress", function(e) {
gsap.to("#fast", {x: e.progress * 300, duration: 0});
});
ScrollMagic создаёт мощный инструмент для синхронизации любого визуального контента с прокруткой. Используя сцены, триггеры, tweens и события, можно создавать плавные, интерактивные интерфейсы, которые реагируют на движение пользователя по странице.