Экземпляр анимации в Lottie Web представляет собой объект, который
управляет загрузкой, воспроизведением, рендерингом и освобождением
ресурсов. Внутри этого объекта реализован жизненный цикл, включающий
инициализацию, активное состояние и завершение работы. Одним из ключевых
моментов завершения является событие destroy,
сигнализирующее о полном уничтожении экземпляра и освобождении всех
связанных ресурсов.
destroy — это финальная точка жизненного цикла
экземпляра анимации. Оно возникает в момент, когда экземпляр полностью
уничтожается методом destroy(). После этого объекта больше
не существует как активной сущности, и любые взаимодействия с ним
считаются недопустимыми.
Основная задача события заключается в информировании внешнего кода о том, что:
Событие возникает строго после вызова метода уничтожения экземпляра:
const anim = lottie.loadAnimation({
container: document.getElementById('box'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
anim.destroy();
После выполнения destroy() библиотека завершает все
внутренние процессы и инициирует цепочку очистки, завершающуюся
триггером события.
Дополнительно событие может быть вызвано косвенно в рамках:
При вызове уничтожения происходит последовательная очистка внутренних подсистем:
Прекращается использование requestAnimationFrame. Все
активные кадры больше не запрашиваются.
Снимаются все подписки на события:
clickresizevisibilitychangeВ зависимости от рендерера:
<svg>, <g>,
<path>Все ссылки на данные анимации, композиции и слои удаляются для ускорения сборки мусора.
Событие может быть использовано для выполнения финальных операций очистки:
anim.addEventListener('destroy', () => {
console.log('Анимация уничтожена');
});
Подписка применяется для синхронизации внешней логики с завершением жизненного цикла, например:
После вызова destroy() экземпляр становится неактивным.
Любые попытки обращения к нему приводят к неопределённому поведению:
anim.play(); // не гарантируется выполнение
anim.stop(); // может не иметь эффекта
Фактически объект теряет валидность как управляющая сущность.
Ключевое свойство состояния после уничтожения:
При динамической смене конфигурации:
anim.destroy();
anim = lottie.loadAnimation({
container: document.getElementById('box'),
renderer: 'svg',
loop: false,
autoplay: true,
path: 'new-animation.json'
});
Если контейнер удаляется из DOM, анимация должна быть уничтожена вручную:
const container = document.getElementById('box');
anim.destroy();
container.remove();
В архитектурах с жизненным циклом компонентов уничтожение анимации привязывается к этапу unmount:
useEffectbeforeUnmountngOnDestroyИгнорирование уничтожения приводит к накоплению:
Особенно критично при многократном создании анимаций в SPA. В таких условиях утечки проявляются как постепенное увеличение потребления памяти и деградация производительности рендера.
play()Наиболее затратный по DOM. После destroy() происходит
полное удаление SVG-структуры, включая все вложенные группы и пути.
Основной акцент на очистке контекста и освобождении буферов. DOM при этом остаётся минимальным.
Удаляются динамически созданные HTML-элементы, привязанные к кадрам анимации.
Событие играет важную роль в подготовке объекта к сборке мусора. После его срабатывания:
Однако финальная очистка памяти зависит от поведения движка
JavaScript, поэтому корректный вызов destroy() является
критическим условием для предотвращения утечек.
После уничтожения экземпляра восстановление возможно только через создание нового объекта:
anim.destroy();
anim = lottie.loadAnimation({
container: document.getElementById('box'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'animation.json'
});
Старый экземпляр не сохраняет состояния и не может быть реанимирован.