В ScrollMagic ключевым элементом управления анимациями является
сцена (Scene). Каждая сцена может
отслеживать положение скролла относительно целевого элемента и вызывать
определенные действия, такие как запуск анимации или добавление
CSS-классов. Для точного управления важны два аспекта: состояние
сцены и направление скролла.
Состояние сцены отражает текущее положение скролла относительно trigger point — точки, в которой сцена должна активироваться. В ScrollMagic сцена может находиться в одном из двух основных состояний:
BEFORE – скролл находится выше
триггерной точки, сцена еще не активирована.DURING – скролл находится между
началом и концом сцены, сцена активна.AFTER – скролл прошел конец сцены,
сцена завершена.Эти состояния можно отслеживать с помощью события update
или enter/leave:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 500
})
.on("enter leave", function(e) {
console.log("Событие:", e.type, "Состояние сцены:", scene.state());
})
.addTo(controller);
Метод scene.state() возвращает строку
"BEFORE" или "AFTER". Для промежуточного
состояния "DURING" можно использовать событие
progress:
scene.on("progress", function(e) {
console.log("Прогресс сцены:", e.progress);
});
e.progress — это число от 0 до 1, отражающее, насколько
пользователь прокрутил сцену.
ScrollMagic позволяет определять направление
прокрутки, что критично для обратной анимации или запуска
событий только при движении вниз или вверх. Направление передается через
свойство scrollDirection в объекте события:
scene.on("enter leave", function(e) {
if(e.scrollDirection === "FORWARD") {
console.log("Пользователь скроллит вниз");
} else if(e.scrollDirection === "REVERSE") {
console.log("Пользователь скроллит вверх");
}
});
Значения scrollDirection:
FORWARD — прокрутка вниз (от начала к
концу страницы).REVERSE — прокрутка вверх (от конца к
началу страницы).Использование направления особенно важно для анимаций, которые должны обратимо реагировать на скролл. Например, появление блока при скролле вниз и скрытие при скролле вверх.
ScrollMagic предоставляет ряд событий для точного контроля:
enter – срабатывает, когда сцена
входит в активное состояние.leave – срабатывает, когда сцена
покидает активное состояние.start – триггер срабатывает в начале
сцены.end – триггер срабатывает в конце
сцены.progress – отслеживает прогресс сцены
в диапазоне от 0 до 1.Пример использования для динамического изменения класса элемента в зависимости от направления:
scene.on("enter leave", function(e) {
var element = document.querySelector("#animateBox");
if(e.scrollDirection === "FORWARD" && e.type === "enter") {
element.classList.add("active");
} else if(e.scrollDirection === "REVERSE" && e.type === "leave") {
element.classList.remove("active");
}
});
1. Анимации с обратным ходом
Для анимаций, где объект должен исчезать при обратном скролле, можно
использовать scrollDirection совместно с
progress:
scene.on("progress", function(e) {
var opacity = e.progress;
if(e.scrollDirection === "REVERSE") {
opacity = 1 - e.progress;
}
document.querySelector("#fadeBox").style.opacity = opacity;
});
2. Сложные последовательности
Для цепочек анимаций можно использовать несколько сцен с разными
triggerElement и duration. Отслеживание
состояния каждой сцены позволяет запускать анимации только при
достижении нужного состояния:
var scene1 = new ScrollMagic.Scene({ triggerElement: "#step1" });
var scene2 = new ScrollMagic.Scene({ triggerElement: "#step2" });
scene1.on("enter", () => console.log("Начало первой сцены"));
scene2.on("enter", () => console.log("Начало второй сцены"));
3. События с динамическим триггером
Состояние сцены можно использовать для динамического изменения позиции триггера:
scene.on("enter leave", function(e) {
if(e.type === "enter") {
scene.triggerElement("#newTrigger");
}
});
Это позволяет создавать адаптивные анимации, где логика сцены изменяется во время скролла.
duration. Нужно учитывать
progress для плавной анимации.enter, leave и
progress. Использование scene.state() отдельно
не даст информации о направлении.Состояние и направление скролла — фундаментальные элементы ScrollMagic, которые обеспечивают точное управление анимациями и интерактивностью. Их правильное применение позволяет создавать плавные, адаптивные и обратимые эффекты, полностью контролируемые логикой сцены.