Метод progress является одним из ключевых инструментов
управления прогрессом сцены в библиотеке ScrollMagic.
Он позволяет получать текущее значение прогресса сцены или устанавливать
его программно. Прогресс сцены — это число от 0 до
1, где 0 соответствует начальному
положению сцены на экране, а 1 — завершению сцены.
scene.progress([value])
value (необязательный) — число от 0 до 1, которое задаёт текущий прогресс сцены.
Возвращаемое значение:
value не передан, метод возвращает текущий
прогресс сцены.value передан, метод устанавливает прогресс сцены
и возвращает объект сцены для цепочки вызовов.Для того чтобы узнать, насколько сцена была прокручена, используется вызов без параметров:
var currentProgress = scene.progress();
console.log(currentProgress); // 0.5 — если сцена пройдена на 50%
Прогресс сцены вычисляется на основе текущего положения скролла и длительности сцены. Это особенно полезно при создании динамических эффектов, таких как анимации, привязанные к прокрутке.
Метод progress позволяет программно управлять состоянием
сцены, задавая точное значение прогресса.
scene.progress(0.75); // Сцена считается пройденной на 75%
При установке значения прогресса ScrollMagic автоматически обновляет все связанные с сценой triggerEvents, tween-анимации и внутренние состояния.
Особенности установки:
enter, leave,
start, end, если заданные условия сцены
выполнены.scene.progress(0.5).setClassToggle("#element", "active");
Одна из самых сильных сторон progress — возможность
синхронизации прокрутки с анимациями.
var tween = TweenMax.to("#box", 1, {x: 500});
var scene = new ScrollMagic.Scene({
duration: 500
})
.setTween(tween)
.addTo(controller);
// Получение прогресса для кастомной логики
scene.on("progress", function(event) {
console.log("Прогресс анимации: ", event.progress);
});
Здесь event.progress соответствует текущему прогрессу
сцены и может использоваться для изменения свойств DOM или вызова других
функций.
var scene = new ScrollMagic.Scene({duration: 300});
scene.addTo(controller);
// Установить прогресс на 50%
scene.progress(0.5);
scene.on("progress", function(e) {
var opacity = e.progress; // 0 -> 1
document.querySelector("#fade").style.opacity = opacity;
});
var tween = TweenMax.to("#box", 1, {x: 300, rotation: 180});
scene.setTween(tween);
scene.on("progress", function(e) {
console.log("Синхронизация анимации: ", e.progress);
});
Метод progress обеспечивает точный контроль над
состоянием сцены, позволяет синхронизировать скролл с
анимациями и программно изменять ход событий. Это делает его незаменимым
инструментом для создания интерактивных и отзывчивых эффектов на
странице.