Событие end в библиотеке ScrollMagic срабатывает в
момент, когда сцена достигает своей конечной точки — то есть
пользователь прокрутил страницу до позиции, соответствующей завершению
действия сцены. Это одно из ключевых событий жизненного цикла сцены,
позволяющее точно отследить момент выхода из активного состояния.
Каждая сцена в ScrollMagic определяется тремя основными параметрами:
Событие end возникает, когда прокрутка достигает
точки:
start + duration
Если duration равен 0, сцена считается мгновенной, и
событие end практически совпадает с start.
Подписка на событие end осуществляется через метод
.on():
scene.on("end", function (event) {
console.log("Сцена завершена");
});
Объект event содержит информацию о состоянии сцены в
момент завершения.
При обработке end доступен объект события со следующими
свойствами:
"end")1)AFTER)FORWARD или REVERSE)Пример:
scene.on("end", function (event) {
console.log(event.state); // AFTER
console.log(event.progress); // 1
});
Сцена в ScrollMagic может находиться в трёх состояниях:
Событие end соответствует переходу:
DURING → AFTER
Это означает, что сцена полностью отработала свою длительность.
leaveХотя end и leave часто используются вместе,
между ними есть важное различие:
| Событие | Когда срабатывает |
|---|---|
leave |
При выходе из сцены (в любом направлении) |
end |
Только при достижении конца сцены |
Пример:
scene.on("leave", function () {
console.log("Выход из сцены");
});
scene.on("end", function () {
console.log("Конец сцены");
});
При прокрутке назад событие leave сработает, а
end — нет.
Событие end особенно полезно в сочетании с направлением
прокрутки:
scene.on("end", function (event) {
if (event.scrollDirection === "FORWARD") {
console.log("Прокрутка вниз завершила сцену");
} else {
console.log("Прокрутка вверх достигла конца сцены");
}
});
Это позволяет различать поведение пользователя.
scene.on("end", function () {
document.querySelector(".box").classList.add("finished");
});
Используется для добавления финального состояния после завершения анимации.
scene.on("end", function () {
nextScene.enabled(true);
});
Позволяет выстраивать последовательные сценарии.
scene.on("end", function () {
console.log("Пользователь досмотрел секцию до конца");
});
Полезно для отслеживания поведения пользователя.
scene.on("end", function () {
document.body.classList.remove("active-section");
});
duration = 0Если сцена имеет нулевую длительность:
new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 0
});
start и end происходят практически
одновременноend может быть сложно отследить визуальноenter вместо endsetPinЕсли сцена закрепляет элемент:
scene.setPin(".block");
Событие end означает момент, когда закрепление
прекращается.
Tweenscene.setTween(".box", 1, { x: 200 });
Событие end соответствует завершению анимации (если
синхронизирована с прокруткой).
1. Ожидание срабатывания при прокрутке вверх
Событие end не всегда вызывается при обратной прокрутке.
Для отслеживания выхода лучше использовать leave.
2. Отсутствие duration
duration: 0
В этом случае end теряет практическую ценность.
3. Неправильное понимание момента срабатывания
end не означает «пользователь перестал скроллить» — это
строго достижение конца сцены.
Часто используется вместе с другими событиями:
scene
.on("start", () => console.log("Начало"))
.on("progress", (e) => console.log(e.progress))
.on("end", () => console.log("Конец"));
Такой подход позволяет полностью контролировать жизненный цикл сцены.
ScrollMagic отслеживает позицию скролла и сравнивает её с границами сцены:
BEFOREDURINGAFTERПереход в состояние AFTER инициирует событие
end.
Событие end:
Особенно важно в длинных интерактивных страницах, где поведение зависит от полного прохождения секции.