Метод refresh является ключевым инструментом управления
сценами в библиотеке ScrollMagic, позволяя
синхронизировать размеры и позиции элементов с текущим состоянием
страницы после изменений DOM или ресайза окна браузера. Он напрямую
влияет на корректность срабатывания триггеров и анимаций.
refresh выполняет повторный расчёт следующих параметров
для каждой сцены:
Метод необходим при динамическом изменении DOM, например:
Без вызова refresh ScrollMagic может неправильно
определить момент срабатывания сцены, что приведёт к визуальным багам
или некорректной работе анимаций.
scene.refresh();
Метод вызывается на экземпляре сцены (ScrollMagic.Scene)
и не требует параметров. Он возвращает саму сцену, что позволяет
использовать цепочку методов:
scene
.setPin("#pinElement")
.addTo(controller)
.refresh();
Автоматическое обновление ScrollMagic
автоматически вызывает refresh при изменении размеров окна
браузера. Однако, при динамических изменениях DOM рекомендуется вызывать
метод вручную, чтобы обновления происходили немедленно.
Производительность Частый вызов
refresh может нагрузить браузер, особенно при большом
количестве сцен. Рекомендуется вызывать метод только после
завершения всех изменений DOM.
Связь с контроллером Метод refresh
синхронизируется с контроллером (ScrollMagic.Controller).
Если сцена привязана к контроллеру, вызов refresh
инициирует пересчёт для всех сцен этого контроллера:
controller.update(true); // обновление всех сцен
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300
})
.setPin("#section1")
.addTo(controller);
// Добавляем динамический контент
document.querySelector("#section1").innerHTML += "<div class='new-item'>Новый элемент</div>";
// Обновляем сцену
scene.refresh();
window.addEventListener("resize", function() {
scene.refresh(); // пересчёт позиции триггера и длительности сцены
});
update — используется для немедленного
обновления состояния сцены. refresh пересчитывает размеры и
позиции, а update сразу применяет новое состояние.setDuration и setOffset —
изменения этих параметров требуют последующего вызова
refresh для корректного отображения.scene.setDuration(400);
scene.refresh(); // пересчёт длительности и позиции
refresh после всех изменений
DOM, а не внутри цикла или частых событий, чтобы минимизировать
нагрузку на браузер.update, если необходимо немедленное срабатывание
анимаций.refresh, иначе пересчёт не будет корректным.Метод refresh обеспечивает точную синхронизацию сцены с
текущей структурой страницы и является обязательным инструментом при
работе с динамическим контентом и изменяющимися размерами элементов. Его
грамотное использование предотвращает большинство визуальных ошибок и
обеспечивает стабильное поведение анимаций ScrollMagic.