В библиотеке ScrollMagic сцена (Scene) является ключевым
элементом, определяющим момент срабатывания анимаций или других эффектов
при прокрутке. Каждая сцена обладает состоянием,
которое отражает её текущее положение относительно видимой области
браузера. Понимание состояния сцены критично для точного управления
поведением элементов на странице.
Сцена в ScrollMagic может находиться в одном из трёх основных состояний:
BEFORE Сцена находится выше
точки триггера, то есть пользователь ещё не прокрутил страницу
до момента её активации. В этом состоянии активные действия, привязанные
к сцене, не выполняются.
DURING Сцена находится в
зоне действия, когда прокрутка пересекла точку триггера и ещё
не достигла конца длительности (duration). В этом состоянии
обычно происходит анимация прогресса, которая
синхронизируется с положением скролла.
AFTER Сцена полностью пройдена,
скролл находится ниже зоны действия сцены. Любые анимации, настроенные
на окончание сцены, остаются в конечном состоянии.
Эти состояния отражаются в свойстве scene.state() и
могут использоваться для логики условного выполнения
кода в зависимости от положения сцены.
state()Метод state() позволяет получить текущее состояние
сцены:
var currentState = scene.state(); // Вернёт 'BEFORE', 'DURING' или 'AFTER'
Это свойство динамически обновляется при скролле, что делает его удобным для реализации интерактивных эффектов, зависящих от позиции пользователя на странице.
ScrollMagic предоставляет несколько событий, которые помогают реагировать на смену состояния сцены:
enter – вызывается при входе сцены в
зону действия (состояние DURING).leave – вызывается при выходе из зоны
действия (состояние AFTER или BEFORE).start – срабатывает при достижении
начала сцены (точки триггера).end – срабатывает при достижении конца
сцены (конца длительности).Пример использования:
scene.on("enter", function (event) {
console.log("Сцена активна:", event.scrollDirection);
});
scene.on("leave", function (event) {
console.log("Сцена покинута:", event.scrollDirection);
});
События позволяют точно синхронизировать анимации с прокруткой, а также выполнять дополнительные действия, такие как изменение классов CSS или управление медиа-контентом.
duration на состояниеДлительность сцены (duration) определяет, как долго
сцена находится в состоянии DURING.
duration = 0, сцена мгновенно переходит из
BEFORE в AFTER. Такой режим полезен для
триггеров без анимации прогресса.duration > 0, состояние DURING
продолжается на протяжении указанного количества пикселей прокрутки, что
позволяет анимировать элементы плавно.Состояние сцены напрямую зависит от параметров:
triggerElement – HTML-элемент,
относительно которого сцена активируется.triggerHook – позиция на экране (от 0
до 1), в которой срабатывает триггер. Например, 0 — верх
окна, 1 — низ окна, 0.5 — центр.offset – смещение относительно точки
триггера, которое позволяет точно подгонять момент активации.Пример:
var scene = new ScrollMagic.Scene({
triggerElement: "#section",
triggerHook: 0.25,
duration: 300
});
В этом примере сцена активируется, когда верх элемента
#section достигает 25% высоты окна, и
остаётся в состоянии DURING на протяжении 300 пикселей
прокрутки.
Состояние сцены удобно использовать для условного изменения интерфейса:
scene.on("update", function(event) {
if (scene.state() === "DURING") {
document.body.classList.add("scrolled-active");
} else {
document.body.classList.remove("scrolled-active");
}
});
Метод update вызывается каждый раз при скролле, а
проверка scene.state() позволяет точно определить, когда
пользователь находится внутри зоны действия сцены.
ScrollMagic часто используется совместно с библиотекой GSAP для управления прогрессом анимации в зависимости от состояния сцены:
var tween = gsap.to("#box", {x: 500, rotation: 360});
scene.setTween(tween);
DURING, прогресс
анимации синхронизируется с прокруткой.BEFORE анимация остаётся в начальном
положении.AFTER анимация завершена.Таким образом, состояние сцены напрямую управляет визуальным результатом.
enter и leave для
единовременных действий, а update для
плавных анимаций.scene.state() перед запуском критических
операций, чтобы избежать непредсказуемого поведения при быстром
скролле.duration, triggerHook и
offset для точной синхронизации с макетом страницы.Состояние сцены является фундаментом ScrollMagic, обеспечивая точный контроль над анимацией, триггерами и логикой прокрутки. Правильное понимание этих принципов позволяет создавать сложные, динамичные интерфейсы с детальной реакцией на скролл.