ScrollMagic — это мощная JavaScript-библиотека для управления анимациями на основе прокрутки страницы. Основная концепция строится вокруг сцен (scenes) и контроллера (controller), которые совместно создают управляемый поток событий и анимаций.
Контроллер является сердцем ScrollMagic. Его задача — отслеживать положение прокрутки и управлять всеми подключенными сценами. Контроллер создается через конструктор:
var controller = new ScrollMagic.Controller({
vertical: true,
globalSceneOptions: {triggerHook: 0.5}
});
Ключевые параметры:
vertical — определяет направление прокрутки (по
умолчанию true для вертикальной прокрутки).globalSceneOptions — позволяет задать общие настройки
для всех сцен, подключенных к контроллеру.Контроллер также поддерживает несколько функций для динамического управления сценами:
addScene(scene) — добавляет сцену к контроллеру.removeScene(scene) — удаляет сцену.updateScene(scene) — обновляет состояние сцены при
изменении параметров.scrollTo(position) — программно прокручивает страницу к
указанной позиции.Контроллер может работать с несколькими сценами одновременно, что делает его идеальным инструментом для сложных анимационных эффектов.
Сцена — это объект, который определяет условия, при которых будет происходить анимация или запуск события. Каждая сцена привязывается к определенному триггеру (trigger) на странице и имеет набор опций.
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 200,
offset: 50,
triggerHook: 0.8
})
.setClassToggle("#animate", "visible")
.addTo(controller);
Основные свойства сцены:
triggerElement — элемент, при достижении которого сцена
активируется.duration — длина сцены в пикселях. Если не указано,
сцена считается моментальной.offset — смещение триггера относительно начала
сцены.triggerHook — точка на экране, при достижении которой
сцена срабатывает. Значение от 0 (верх экрана) до 1 (низ экрана).Методы сцены:
.setClassToggle(element, className) — автоматически
добавляет или удаляет класс в зависимости от положения сцены..setTween(tween) — связывает сцену с анимацией,
например, через библиотеку GSAP..addIndicators() — полезный инструмент для отладки,
визуализирует положение сцены..on(event, callback) — подписка на события:
enter, leave, start,
end, progress.Сцены могут быть моментальными (trigger срабатывает мгновенно) и протяженными (duration > 0, анимация привязана к прокрутке).
Триггер — это элемент, который запускает сцену. Hook — это точка на
экране, где триггер срабатывает. Значение triggerHook
задается в диапазоне от 0 до 1:
0 — верх экрана.0.5 — центр экрана.1 — низ экрана.При комбинировании offset и triggerHook
можно точно настроить момент активации сцены, что важно для сложных
параллакс-эффектов и синхронизации с другими анимациями.
ScrollMagic часто используется совместно с анимационными
библиотеками, такими как GSAP (GreenSock Animation
Platform). Связка делается через метод
.setTween():
var tween = gsap.to("#box", {x: 400, duration: 1});
var scene = new ScrollMagic.Scene({triggerElement: "#trigger"})
.setTween(tween)
.addTo(controller);
Преимущество такой интеграции в том, что анимация становится привязанной к прокрутке, а не к времени. Это обеспечивает точную синхронизацию движения объектов с поведением пользователя на странице.
Сцены имеют несколько ключевых событий, которые можно использовать для расширенной логики:
enter — пользователь прокрутил страницу и сцена
активировалась.leave — пользователь покинул область сцены.start — начало сцены (если duration > 0).end — конец сцены.progress — процент выполнения сцены (от 0 до 1),
полезно для динамического изменения анимации.Эти события позволяют гибко управлять поведением элементов на странице и создавать интерактивные интерфейсы с богатой анимацией.
ScrollMagic поддерживает групповое управление сценами через массивы и циклы. Например, можно динамически создавать сцены для списка элементов:
document.querySelectorAll(".item").forEach(function(elem){
new ScrollMagic.Scene({
triggerElement: elem,
triggerHook: 0.9
})
.setClassToggle(elem, "active")
.addTo(controller);
});
Это позволяет масштабировать анимации без дублирования кода и легко адаптировать интерфейс под динамический контент.
.setClassToggle(), .setTween(),
.addIndicators() упрощают создание анимаций без
вмешательства в DOM напрямую.Архитектура ScrollMagic строится на принципах модульности, событийности и привязки к прокрутке, что делает её удобной для построения сложных, отзывчивых интерфейсов с богатой анимацией. Каждая часть библиотеки — контроллер, сцена, триггер, хук и tween — играет определённую роль в создании динамических и интерактивных веб-страниц.