ScrollMagic предоставляет мощный механизм для отслеживания прокрутки страницы и управления анимациями на основе положения скролла. Ключевым элементом этого механизма является сцена (Scene). Сцена описывает область прокрутки, в пределах которой выполняются определённые действия, например запуск анимации, изменение классов или управление таймлайнами.
Для создания сцены используется конструктор
ScrollMagic.Scene, принимающий объект с настройками:
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, при достижении которого сцена активируется
duration: 500, // длина сцены в пикселях
offset: 100 // смещение относительно триггер-элемента
});
0, сцена считается
мгновенной.Сцена не работает самостоятельно. Она должна быть добавлена в контроллер (Controller):
var controller = new ScrollMagic.Controller();
scene.addTo(controller);
Контроллер следит за позицией скролла и управляет всеми сценами, связанными с ним.
Основной метод для отслеживания прогресса сцены — это событие
progress. Оно срабатывает каждый раз при изменении позиции
скролла в пределах сцены и передает значение прогресса от 0 до 1.
scene.on("progress", function(event) {
console.log("Прогресс сцены: ", event.progress);
});
event.progress — дробное значение, показывающее, какая часть сцены пройдена:
0 — сцена ещё не достигнута.0.5 — прокручена половина сцены.1 — сцена завершена.Использование этого события позволяет плавно управлять анимациями и другими эффектами, синхронизированными с прокруткой.
Для динамической визуализации прогресса можно применять CSS-свойства, связанные с процентным заполнением:
var progressBar = document.querySelector(".progress-bar");
scene.on("progress", function(event) {
progressBar.style.width = (event.progress * 100) + "%";
});
Таким образом, прогресс сцены напрямую контролирует ширину полосы загрузки или любые другие визуальные элементы.
ScrollMagic отлично интегрируется с библиотекой GSAP, что позволяет синхронизировать анимацию с прогрессом сцены:
var tween = gsap.to("#box", {x: 500, duration: 1});
scene.setTween(tween);
Если необходимо управлять анимацией вручную, можно использовать прогресс сцены для обновления состояния анимации:
scene.on("progress", function(event) {
tween.progress(event.progress).pause();
});
Это особенно полезно для сложных интерактивных эффектов, где анимация должна строго соответствовать прокрутке пользователя.
Сцена предоставляет несколько событий, которые помогают отслеживать её состояние:
enter для
мгновенных сцен.leave для
мгновенных сцен.Пример использования:
scene.on("enter leave", function(event) {
if(event.type === "enter") {
console.log("Сцена активирована");
} else {
console.log("Сцена завершена");
}
});
Для контроля над вычислением прогресса можно использовать метод
setTween с параметром scrub. Scrub
обеспечивает плавную синхронизацию анимации с прокруткой:
scene.setTween(tween, {scrub: true});
ScrollMagic позволяет менять свойства сцены во время работы:
scene.duration(800); // изменить длительность
scene.offset(50); // изменить смещение
scene.triggerElement("#newTrigger"); // изменить триггер
Это полезно для адаптивных интерфейсов, где размеры элементов и прокрутка могут меняться в зависимости от устройства.
При сочетании нескольких сцен или при параллакс-эффектах можно отслеживать прогресс каждой сцены и использовать его для управления разными слоями:
scenes.forEach(function(scene, index) {
scene.on("progress", function(event) {
layers[index].style.transform = `translateY(${event.progress * 100}px)`;
});
});
Такой подход позволяет создавать сложные, многослойные анимации, синхронизированные с прокруткой страницы, без необходимости вручную вычислять положение скролла.
Отслеживание прогресса сцены в ScrollMagic является фундаментом для
создания интерактивных и динамичных веб-интерфейсов. Использование
событий progress, enter и leave
вместе с интеграцией GSAP и scrub обеспечивает полный
контроль над визуальными эффектами, обеспечивая плавность и точность
анимации.