Событие start — одно из ключевых событий сцены в
библиотеке ScrollMagic. Оно сигнализирует о том, что сцена достигла
точки активации (trigger point) и начала своё выполнение.
Это событие особенно важно при построении интерактивных сценариев,
синхронизированных со скроллом.
Событие start возникает в тот момент, когда верхняя
граница сцены пересекает заданную точку триггера. Эта точка определяется
комбинацией параметров:
triggerElementtriggerHookoffsetФактически, start означает переход сцены из состояния
“до начала” (BEFORE) в “активное” (DURING или
AFTER, в зависимости от продолжительности).
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
triggerHook: 0.5
})
.on("start", function (event) {
console.log("Сцена началась");
})
.addTo(controller);
В этом примере обработчик события start будет вызван в
момент, когда элемент с идентификатором #trigger достигнет
середины viewport.
В обработчик передаётся объект event, содержащий важную
информацию о состоянии сцены:
event.type — тип события ("start")event.target — ссылка на сцену
(ScrollMagic.Scene)event.progress — прогресс выполнения сцены (от
0 до 1)event.scrollDirection — направление скролла
("FORWARD" или "REVERSE")Пример:
.on("start", function (event) {
console.log(event.type); // start
console.log(event.progress);
console.log(event.scrollDirection);
});
Событие start может срабатывать несколько раз:
Это поведение зависит от направления скролла:
.on("start", function (event) {
if (event.scrollDirection === "FORWARD") {
console.log("Вход в сцену сверху вниз");
} else {
console.log("Возврат к началу сцены снизу вверх");
}
});
durationПоведение события start зависит от того, задана ли
длительность сцены:
durationduration: 0
start и end происходят практически
одновременноdurationduration: 300
start фиксирует начало диапазона сценыend срабатывает позже, после прохождения всей
длительности.on("start", function () {
document.querySelector("#box").classList.add("animate");
});
Запуск CSS-анимации в момент появления элемента в зоне видимости.
.on("start", function () {
loadHeavyComponent();
});
Загрузка ресурсоёмких компонентов только при необходимости.
.on("start", function () {
analytics.track("Scene Started");
});
Фиксация взаимодействий пользователя со страницей.
Хотя для этого существует .setClassToggle(), иногда
требуется более гибкая логика:
.on("start", function (event) {
if (event.scrollDirection === "FORWARD") {
element.classList.add("active");
} else {
element.classList.remove("active");
}
});
enterВажно различать start и enter:
start — срабатывает строго в момент начала сценыenter — срабатывает при входе в активную область
сценыПри наличии duration:
start — точка началаenter — может совпадать с start, но
логически обозначает “вход”Событие start часто используется вместе с:
end — завершение сценыprogress — изменение прогрессаleave — выход из сценыПример комплексного отслеживания:
scene
.on("start", () => console.log("start"))
.on("progress", (e) => console.log("progress:", e.progress))
.on("end", () => console.log("end"));
reverseПараметр reverse влияет на повторное срабатывание:
reverse: false
start сработает только один разreverse: true
Пример защиты от повторного выполнения:
let triggered = false;
scene.on("start", function () {
if (!triggered) {
initAnimation();
triggered = true;
}
});
ScrollMagic предоставляет встроенные инструменты:
scene.addIndicators();
Позволяет визуально увидеть:
Это значительно упрощает понимание момента срабатывания
start.
При наличии нескольких сцен важно учитывать порядок их срабатывания:
start может вызываться последовательно для нескольких
сцен при быстром скроллеПример:
scene1.on("start", () => console.log("Scene 1 start"));
scene2.on("start", () => console.log("Scene 2 start"));
Событие start связано с изменением состояния сцены:
BEFORE → DURING (или AFTER,
если duration = 0)Проверка состояния:
scene.state(); // BEFORE, DURING, AFTER
1. Отсутствие addTo(controller)
Сцена не будет работать без добавления в контроллер.
2. Неверный triggerElement
Если элемент не существует или неправильно выбран, событие не сработает.
3. Неправильный triggerHook
Значения вне диапазона [0, 1] приводят к
непредсказуемому поведению.
start фиксирует точку начала сценыСобытие start служит отправной точкой для запуска
логики, привязанной к положению прокрутки, и является основой для
построения сложных интерактивных интерфейсов.