ScrollMagic предоставляет мощный механизм управления событиями,
который позволяет отслеживать изменения состояния сцены и выполнять
действия в момент наступления определённых событий. Основные события
делятся на события сцены (Scene) и события контроллера
(Controller), каждое из которых имеет своё назначение и
методы обработки.
Сцена (Scene) — это центральная единица управления
анимацией при прокрутке. События сцены позволяют реагировать на её
изменения и взаимодействие пользователя с элементами страницы.
start и endСобытия start и end происходят, когда
скролл достигает начала или конца сцены.
var scene = new ScrollMagic.Scene({ triggerElement: "#trigger" })
.on("start", function (event) {
console.log("Сцена началась", event.scrollDirection);
})
.on("end", function (event) {
console.log("Сцена завершена", event.scrollDirection);
})
.addTo(controller);
event.scrollDirection — указывает
направление прокрутки ("FORWARD" или
"REVERSE").enter и leaveСобытие enter срабатывает, когда пользователь входит в
область сцены, а leave — когда покидает её.
scene.on("enter", function (event) {
console.log("Пользователь вошёл в сцену");
});
scene.on("leave", function (event) {
console.log("Пользователь покинул сцену");
});
Особенность этих событий в том, что они учитывают направление скролла, поэтому можно различать вход при прокрутке вниз и вверх.
progressСобытие progress вызывается при изменении прогресса
сцены, независимо от направления.
scene.on("progress", function (event) {
console.log("Прогресс сцены:", event.progress);
});
event.progress — число от 0 до 1,
показывающее процент прохождения сцены.ScrollMagic позволяет добавлять коллбэки не только через
.on, но и в методах цепочки:
.setClassToggle(element, className) — добавляет или
убирает CSS-класс при пересечении сцены..setTween(tween) — автоматически привязывает анимацию к
сцене и прогрессу.var scene = new ScrollMagic.Scene({ triggerElement: "#trigger", duration: 300 })
.setClassToggle("#animate", "visible")
.setTween("#animate", { opacity: 1, y: 50, duration: 1 })
.addTo(controller);
В этом примере коллбэки событий сцены управляют классами и анимациями
без отдельного подключения обработчиков on.
Контроллер (Controller) управляет всеми сценами и может
отслеживать глобальные события прокрутки.
updateСрабатывает при каждом изменении состояния прокрутки:
controller.on("update", function (event) {
console.log("Обновление контроллера. Скролл:", event.scrollPos);
});
event.scrollPos — текущая позиция
скролла в пикселях.changeСрабатывает при изменении свойства контроллера, например, вертикальной ориентации или размеров:
controller.on("change", function (event) {
console.log("Свойство контроллера изменилось:", event);
});
Направление прокрутки Все события содержат
свойство scrollDirection, которое помогает различать
движение вниз и вверх.
Прогресс сцены Используется для плавного
контроля анимаций через progress. Это особенно актуально
при сложных анимациях, которые должны синхронизироваться с
прокруткой.
Цепочки вызовов Методы setTween и
setClassToggle позволяют минимизировать ручное управление
событиями, автоматически создавая внутренние коллбэки.
Удаление обработчиков Для предотвращения утечек
памяти или конфликтов можно удалять обработчики через
.off(eventName, callback).
scene.off("enter");
scene.on("enter", function () {
gsap.to("#box", { scale: 1.2, duration: 0.5 });
});
scene.on("leave", function () {
gsap.to("#box", { scale: 1, duration: 0.5 });
});
scene.on("progress", function (event) {
gsap.to("#line", { strokeDashoffset: 100 * (1 - event.progress) });
});
var scene1 = new ScrollMagic.Scene({ triggerElement: "#section1" }).addTo(controller);
var scene2 = new ScrollMagic.Scene({ triggerElement: "#section2" }).addTo(controller);
controller.on("update", function () {
console.log("Сцены обновлены:", scene1.progress(), scene2.progress());
});
События и коллбэки в ScrollMagic обеспечивают гибкое управление
анимациями и состояниями элементов на странице. Основные принципы —
правильное использование enter, leave,
progress и глобальных событий контроллера, а также
оптимизация через встроенные методы setTween и
setClassToggle. Это позволяет создавать сложные
интерактивные эффекты, полностью синхронизированные с прокруткой.