В ScrollMagic сцена (Scene) является базовым
строительным блоком для привязки анимаций к прокрутке страницы.
Синхронизация нескольких сцен позволяет управлять
последовательностью анимаций, их взаимным перекрытием и совместной
координацией, создавая сложные визуальные эффекты при скролле.
Существует несколько ключевых принципов:
ScrollMagic.Controller, автоматически
синхронизируются относительно прокрутки страницы.triggerHook и offset их события могут
срабатывать синхронно.const controller = new ScrollMagic.Controller();
// Сцена 1
const scene1 = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300,
triggerHook: 0.5
})
.setClassToggle("#section1", "visible")
.addTo(controller);
// Сцена 2
const scene2 = new ScrollMagic.Scene({
triggerElement: "#section2",
duration: 500,
triggerHook: 0.5
})
.setTween("#section2", { opacity: 1, y: 0 })
.addTo(controller);
Особенности:
enter и leave каждой сцены можно
использовать для запуска дополнительных анимаций или логики.Для синхронизации нескольких сцен можно использовать
GSAP Timeline совместно с ScrollMagic. Это позволяет
создавать цепочки анимаций с точным таймингом и последовательностью.
const timeline = gsap.timeline();
timeline
.from("#box1", { duration: 1, x: -200, opacity: 0 })
.from("#box2", { duration: 1, y: 100, opacity: 0 })
.from("#box3", { duration: 1, scale: 0, opacity: 0 });
const scene = new ScrollMagic.Scene({
triggerElement: "#animation-section",
duration: 800,
triggerHook: 0.5
})
.setTween(timeline)
.addTo(controller);
Преимущества подхода с Timeline:
События enter, leave, progress
предоставляют гибкие возможности для управления несколькими сценами.
scene1.on("enter", () => {
scene2.enabled(true); // активируем вторую сцену при входе в первую
});
scene1.on("leave", () => {
scene2.enabled(false); // деактивируем вторую сцену при выходе из первой
});
Принципы работы с событиями:
enter срабатывает при пересечении триггерной точки,
позволяя запускать другие сцены или анимации.leave позволяет останавливать или сбрасывать состояния
элементов.progress предоставляет текущий процент прокрутки сцены,
что полезно для динамических эффектов или плавной синхронизации
нескольких объектов.Перекрытие сцен (overlapping scenes) используется, когда несколько сцен должны управлять одними и теми же элементами или происходить одновременно.
const sceneA = new ScrollMagic.Scene({
triggerElement: "#overlap1",
duration: 400,
})
.setTween("#overlap1", { x: 100 })
.addTo(controller);
const sceneB = new ScrollMagic.Scene({
triggerElement: "#overlap2",
duration: 400,
})
.setTween("#overlap2", { opacity: 1 })
.addTo(controller);
Тонкости перекрытия:
triggerHook и duration.timeline или события progress, чтобы управлять
состоянием нескольких элементов одновременно.Сцены можно создавать и изменять динамически в зависимости от состояния страницы, например при загрузке контента или изменении размера окна:
window.addEventListener("resize", () => {
scene1.duration(window.innerHeight / 2);
scene2.offset(window.innerHeight / 4);
});
Преимущества:
enter, leave,
progress для запуска или синхронизации сцен.Соблюдение этих принципов позволяет создавать сложные, интерактивные страницы с множеством синхронизированных эффектов, полностью управляемых через ScrollMagic.