В ScrollMagic сцены могут быть взаимозависимыми, что позволяет создавать сложные анимации, где одно событие влияет на другое. Понимание принципов зависимых сцен критически важно для построения интерактивных и синхронизированных эффектов прокрутки.
Зависимая сцена — это сцена, которая инициализируется или управляется на основании состояния другой сцены. В ScrollMagic это реализуется через события, методы управления сценами и синхронизацию по времени или позиции скролла.
Основные сценарии использования зависимых сцен:
ScrollMagic позволяет подписываться на события сцен
с помощью метода .on(). Ключевые события:
enter — триггер при входе сцены в зону видимости.leave — триггер при выходе сцены из зоны
видимости.start и end — срабатывают при достижении
начала или конца сцены.progress — срабатывает при изменении прогресса сцены от
0 до 1.Пример зависимости сцены B от сцены A:
var controller = new ScrollMagic.Controller();
var sceneA = new ScrollMagic.Scene({
triggerElement: "#sectionA",
duration: 500
})
.setPin("#sectionA")
.addTo(controller);
var sceneB = new ScrollMagic.Scene({
triggerElement: "#sectionB",
duration: 300
})
.setTween("#sectionB", {opacity: 1})
.addTo(controller);
sceneA.on("enter", function () {
sceneB.enable(); // активируем сцену B только после входа в сцену A
});
sceneB.disable(); // изначально сцена B отключена
В этом примере сцена B не активна, пока сцена A не войдёт в зону видимости, что позволяет контролировать последовательность событий.
progress для динамических зависимостейМетод progress даёт возможность синхронизировать
анимации по ходу скролла. Это особенно полезно для зависимых сцен с
параллакс-эффектами или постепенным изменением
свойств:
sceneA.on("progress", function (event) {
var progress = event.progress;
sceneB.duration(progress * 500); // динамически меняем длительность сцены B
});
Здесь сцена B адаптируется к прогрессу сцены A, создавая плавную зависимость между анимациями.
Для сложных интерфейсов часто используется цепочка сцен, где каждая следующая зависит от предыдущей:
var scenes = [];
for (var i = 0; i < 5; i++) {
var scene = new ScrollMagic.Scene({
triggerElement: "#section" + i,
duration: 200
})
.setTween("#section" + i, {y: "-50%", opacity: 1})
.addTo(controller);
scenes.push(scene);
if(i > 0) {
scenes[i-1].on("leave", function() {
scene.enable();
});
scene.disable();
}
}
ScrollMagic предоставляет несколько методов, которые упрощают работу с зависимостями:
scene.enable() / scene.disable() —
включение и отключение сцены.scene.destroy(true) — удаление сцены с контроллера и
очистка ресурсов.scene.setTween() — динамическое изменение анимации в
зависимости от другой сцены.scene.triggerHook() — установка точки триггера, что
позволяет синхронизировать сцены по позиции скролла.Пример комбинирования зависимостей:
sceneA.on("enter", function () {
sceneB.setTween("#sectionB", {scale: 1.2, opacity: 1});
sceneB.enable();
});
При создании зависимых сцен важно учитывать:
transform, opacity) вместо
top или left.disable() для уменьшения нагрузки на
контроллер.