В ScrollMagic сцена (Scene) представляет собой объект,
который связывает определённое событие прокрутки с анимацией или
изменением состояния элементов на странице. В процессе разработки часто
возникает необходимость удалять сцены — как полностью, так и частично,
сохраняя при этом контроль над поведением страницы.
ScrollMagic предоставляет несколько способов для удаления сцены. Основные методы:
scene.destroy()Метод destroy() полностью удаляет сцену, освобождая
ресурсы и отменяя все привязки событий. Его синтаксис:
scene.destroy([reset]);
true, сцена возвращает элементы к исходному состоянию перед
уничтожением. По умолчанию false.Пример использования:
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 200
})
.setClassToggle("#animate", "active")
.addTo(controller);
// Полное удаление сцены
scene.destroy(true); // элементы вернутся в исходное состояние
Особенности:
start,
end, enter, leave и т.д.).controller.removeScene(scene)Если требуется удалить сцену из контроллера, но оставить объект сцены доступным для возможного повторного добавления, используется метод контроллера:
controller.removeScene(scene);
Пример:
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger"
})
.addTo(controller);
// Удаление сцены из контроллера
controller.removeScene(scene);
Отличие от destroy():
removeScene() снимает сцену с контроллера, но сам
объект остаётся в памяти.controller.addScene(scene).scene.removeClassToggle() или ручное управление
стилями.ScrollMagic позволяет работать с массивами сцен:
var scenes = [scene1, scene2, scene3];
scenes.forEach(function(s) {
s.destroy(true);
});
Если сцены находятся в контроллере, можно сначала получить все сцены и удалить их циклом:
controller = new ScrollMagic.Controller();
var allScenes = controller._sceneObjects; // внутренний массив, использовать осторожно
allScenes.forEach(function(s) {
s.destroy(true);
});
Рекомендуется сохранять ссылки на созданные сцены в собственных массивах для управления их удалением, вместо прямого обращения к приватным свойствам контроллера.
Иногда требуется удалить не всю сцену, а только эффекты:
scene.removeClassToggle();
Если сцена использует GSAP-анимации через setTween(),
можно отключить их отдельно:
scene.setTween(null);
Для аккуратного удаления сцены полезно отключить события:
scene.off("start end enter leave");
scene.destroy(true);
off() снимает все слушатели, что предотвращает
возможные ошибки при удалении сцены в динамически изменяемом
интерфейсе.off() и destroy(true) полностью
очищает сцену и возвращает элементы к исходному состоянию.Удаление сцен актуально в следующих сценариях:
Эффективное удаление сцен — ключевой инструмент управления ScrollMagic-контроллером, позволяющий поддерживать чистоту DOM, гибко изменять анимации и обеспечивать стабильность работы при сложных интерфейсах.