Событие update является одним из ключевых механизмов
отслеживания состояния сцены в библиотеке ScrollMagic. Оно срабатывает
каждый раз, когда происходит пересчёт параметров сцены, связанных с
прокруткой, но без изменения её активного состояния (в
отличие от enter или leave).
updateСобытие update триггерится при любом изменении
параметров, влияющих на расчёт позиции сцены:
.update() вручнуюduration,
offset, triggerHook)Важно понимать: update вызывается даже если
сцена не активирована, но её расчётные параметры
изменились.
При подписке на событие используется стандартный синтаксис:
scene.on("update", function (event) {
// обработка
});
Объект event содержит полезные данные:
event.startPos — позиция начала сценыevent.endPos — позиция конца сценыevent.scrollPos — текущая позиция прокруткиСобытие update используется для:
Позволяет получать актуальные значения начала и конца сцены:
scene.on("update", function (event) {
console.log("Start:", event.startPos);
console.log("End:", event.endPos);
});
Это особенно полезно при динамической верстке, где элементы могут менять размеры.
Можно использовать update для синхронизации данных с
другими системами:
scene.on("update", function (event) {
let progress = (event.scrollPos - event.startPos) / (event.endPos - event.startPos);
console.log("Progress:", progress);
});
Событие помогает понять, как ScrollMagic вычисляет позиции:
scene.on("update", function (event) {
console.table(event);
});
update vs
progressupdate — вызывается при пересчёте параметров сценыprogress — вызывается при изменении прогресса сцены (0
→ 1)update vs
enter/leaveupdate не означает изменение состояния сценыenter и leave сигнализируют о входе/выходе
сцены из активной областиСобытие может вызываться очень часто, особенно при прокрутке. Это требует осторожности:
Неправильное использование может привести к падению FPS:
scene.on("update", function (event) {
// плохо: сложные DOM-операции
});
Оптимизированный вариант:
let lastUpdate = 0;
scene.on("update", function (event) {
const now = Date.now();
if (now - lastUpdate > 100) {
lastUpdate = now;
// лёгкие операции
}
});
Событие update тесно связано с объектом
Controller:
const controller = new ScrollMagic.Controller();
Контроллер управляет:
update при измененияхВ некоторых случаях требуется явно инициировать обновление:
scene.update(true);
Параметр true указывает на немедленный пересчёт, что
вызовет событие update.
При изменении DOM после инициализации:
window.addEventListener("resize", function () {
scene.update();
});
Или:
controller.update(true);
Это гарантирует корректный пересчёт позиций сцены.
Обработчик update не должен содержать:
update не сообщает:
Для этого используются:
progressenterleaveprogress// неэффективно
scene.on("update", function (event) {
// попытка отслеживать прогресс
});
Правильный подход:
scene.on("progress", function (event) {
console.log(event.progress);
});
Часто используется связка:
scene
.on("update", function (event) {
console.log("update");
})
.on("progress", function (event) {
console.log("progress:", event.progress);
})
.on("enter", function () {
console.log("enter");
});
Это даёт полную картину поведения сцены.
Событие update отражает внутреннюю работу
ScrollMagic:
updateenter, progress, leave)Таким образом, update — это низкоуровневое
событие, отражающее сам факт перерасчёта, а не логическое
состояние сцены.
В крупных проектах событие применяется для:
Пример:
scene.on("update", function (event) {
externalRenderer.updateCamera(event.scrollPos);
});
Событие update служит фундаментальным инструментом для
тонкой настройки поведения сцен и понимания внутренней логики работы
ScrollMagic.