Сцена (Scene) в ScrollMagic является фундаментальной единицей, с помощью которой контролируется анимация и взаимодействие элементов с прокруткой страницы. Она определяет участок прокрутки, в течение которого активируются действия и анимации, и управляет их временем и поведением.
Создать сцену можно с использованием конструктора
ScrollMagic.Scene. Основной синтаксис:
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // Элемент, при попадании которого сцена активируется
duration: 200, // Длина сцены в пикселях или как процент от высоты окна
offset: 50 // Сдвиг начала сцены относительно triggerElement
});
Ключевые параметры сцены:
triggerElement – элемент DOM, относительно которого
рассчитывается начало сцены. Может быть любым CSS-селектором или
DOM-узлом.duration – длина сцены. Если установлено в
0, сцена будет мгновенной (событие срабатывает один раз).
Если больше нуля, сцена активна на протяжении указанной длины
прокрутки.offset – смещение начала сцены от верхней границы
triggerElement. Позволяет точнее позиционировать момент активации.Сцена без контроллера не функционирует. Контроллер
(ScrollMagic.Controller) управляет всеми сценами и
синхронизирует их с прокруткой:
var controller = new ScrollMagic.Controller();
scene.addTo(controller);
Контроллер может быть настроен с дополнительными параметрами,
например vertical: false, если требуется горизонтальная
прокрутка.
Сцена генерирует несколько ключевых событий, которые позволяют реагировать на изменения прокрутки:
enter – срабатывает, когда прокрутка достигает начала
сцены.leave – срабатывает, когда прокрутка выходит за пределы
сцены.start и end – указывают точное положение
начала и конца сцены относительно окна просмотра.progress – процент прохождения сцены, значение от 0 до
1.Пример использования событий:
scene.on("enter", function (event) {
console.log("Сцена активирована");
});
scene.on("progress", function (event) {
console.log("Прогресс сцены:", event.progress);
});
Сцены в ScrollMagic часто используются совместно с библиотекой GSAP (GreenSock Animation Platform) для создания плавных анимаций:
var tween = gsap.to("#animate", {duration: 1, x: 300, opacity: 0.5});
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400
})
.setTween(tween)
.addTo(controller);
Метод setTween привязывает анимацию к сцене, что
позволяет прогрессу сцены управлять анимацией в реальном
времени.
С помощью метода setPin элемент можно «закрепить» на
время действия сцены:
scene.setPin("#pinnedElement");
Особенности setPin:
duration и offset
для сложных эффектов параллакса.ScrollMagic предоставляет методы для динамического управления сценами:
scene.addIndicators() – отображает визуальные
индикаторы начала и конца сцены (только для разработки).scene.remove() – удаляет сцену из контроллера.scene.destroy() – полностью уничтожает сцену,
освобождая ресурсы.scene.update() – обновляет расчёт сцены после изменений
DOM или размеров окна.Комбинирование нескольких сцен – позволяет создавать сложные последовательности анимаций:
var scene1 = new ScrollMagic.Scene({ triggerElement: "#first" }).setTween(tween1).addTo(controller);
var scene2 = new ScrollMagic.Scene({ triggerElement: "#second" }).setTween(tween2).addTo(controller);Вложенные сцены – сцена внутри сцены может управлять отдельной анимацией элемента, сохраняя синхронизацию с основной прокруткой.
Прогресс-ориентированная анимация –
использование event.progress для управления сложными
изменениями CSS, например цветом, масштабом или прозрачностью.
duration для сцен, где требуется
плавная анимация, иначе эффект будет мгновенным.update() после динамического изменения
контента, чтобы сцена правильно пересчитала свои параметры.Сцены являются ядром ScrollMagic, позволяя синхронизировать элементы страницы с прокруткой, управлять временем анимаций и создавать интерактивные эффекты различной сложности. Их правильная конфигурация и комбинирование с tween-анимациями открывает возможности для создания современных, динамичных интерфейсов.