В ScrollMagic автоматическое обновление сцены (Scene)
является ключевым механизмом для поддержания синхронизации анимаций и
триггеров с текущим состоянием DOM. Оно необходимо в тех случаях, когда
размеры элементов или положение страницы могут динамически изменяться
после инициализации сцены. Без этого сцена может срабатывать
некорректно, либо анимации будут запускаться не в нужный момент.
scene.refresh()Метод refresh() у объекта Scene позволяет
вручную пересчитать все параметры сцены: положение триггера,
длительность (duration), а также состояние активации. Это
особенно полезно при динамическом изменении контента:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 500
})
.setClassToggle("#animateElement", "active")
.addTo(controller);
// После изменения контента:
scene.refresh();
Особенности метода refresh():
duration сцены, если оно задано в
процентах относительно высоты элемента.controller.update()ScrollMagic предоставляет объект Controller, который
управляет всеми сценами. Контроллер имеет метод update(),
вызываемый для пересчета всех подключённых сцен:
controller.update(true); // true — пересчитывать все сцены
true заставляет контроллер обновить сцены
независимо от текущего положения скролла.controller.update() гарантирует корректную активацию.refreshIntervalКонтроллер ScrollMagic может автоматически обновлять сцены через
определённый интервал времени. Для этого используется опция
refreshInterval при создании контроллера:
var controller = new ScrollMagic.Controller({
refreshInterval: 100 // миллисекунды
});
Рекомендации по использованию:
scene.refresh().Поскольку ScrollMagic опирается на положение элементов на странице,
изменение размеров окна (window.resize) требует пересчета
сцены. Обычно это реализуется так:
window.addEventListener("resize", function() {
controller.update(true); // пересчет всех сцен при изменении размеров окна
});
triggerHook и
duration, зависящими от размеров экрана.Если на странице элементы изменяются после загрузки (например, подгружается изображение или текст), автоматическое обновление предотвращает рассинхронизацию сцены:
scene.refresh() для конкретной сцены, когда известно,
какой элемент изменился.controller.update(true) для глобального пересчета всех
сцен.refreshInterval для страниц с часто
изменяющимся контентом.scene.refresh() — обновление отдельной
сцены после изменений в DOM.controller.update(true) — глобальное
обновление всех сцен контроллера.refreshInterval — автоматическое
обновление сцен через заданный интервал.