Жизненный цикл анимации в mo.js строится вокруг последовательности состояний, через которые проходит каждый tween или shape, начиная от инициализации параметров и заканчивая завершением или прерыванием выполнения. Управление этими состояниями реализовано через систему callback-функций и внутренний тайминг библиотеки, основанный на requestAnimationFrame, что обеспечивает синхронизацию с рендерингом браузера и предсказуемое поведение анимаций.
Каждая анимация в mo.js проходит через несколько фундаментальных фаз:
Инициализация На этом этапе создаётся экземпляр
анимации (например, mojs.Tween или
mojs.Shape). Определяются начальные параметры:
длительность, задержка, кривые easing, свойства трансформации и
визуальные атрибуты. Анимация ещё не запущена, но уже зарегистрирована в
системе.
Ожидание старта Если задана задержка
(delay), анимация находится в состоянии ожидания. В этот
период она не влияет на DOM и не инициирует обновления свойств, но уже
учитывается в общем таймлайне.
Активное выполнение Основная фаза, в которой
происходит интерполяция значений между начальным и конечным состоянием.
Именно здесь вызываются onUpdate и выполняется перерасчёт
всех анимируемых параметров.
Завершение После достижения 100% прогресса анимация
переходит в состояние завершения, где вызывается
onComplete. В зависимости от настроек возможно повторение
или фиксация финального состояния.
Прерывание Анимация может быть остановлена вручную
или системой. В этом случае жизненный цикл завершается без перехода в
завершённое состояние, но с возможным вызовом onStop.
Система жизненного цикла в mo.js основана на событийных callback-функциях, привязанных к конкретным этапам выполнения анимации. Эти callback-и позволяют точно контролировать поведение анимации без необходимости вмешиваться в её внутренний механизм.
Основные события:
onStartonUpdateonCompleteonRepeatonPauseonResumeonStopКаждое событие связано с определённым моментом времени внутри жизненного цикла и получает контекст текущей анимации, включая прогресс, текущие значения свойств и состояние времени.
Событие onStart вызывается в момент фактического начала
анимации, когда завершается задержка и первый кадр начинает изменять
свойства объектов.
Характерные особенности:
onUpdateВажная деталь заключается в том, что onStart может
вызываться повторно при включённом цикле повторений
(repeat), что делает его частью повторяемого жизненного
цикла.
onUpdate является центральным событием всей системы
анимации. Оно вызывается на каждом кадре во время активной фазы
выполнения.
Внутри onUpdate доступен прогресс анимации, обычно
нормализованный в диапазоне от 0 до 1. На основании этого значения mo.js
интерполирует все свойства.
Ключевые характеристики:
Типичный поток внутри onUpdate включает:
Событие onComplete фиксирует момент завершения одного
полного цикла анимации. Оно вызывается, когда прогресс достигает
конечного значения (обычно 1), и все вычисления интерполяции
завершены.
Особенности поведения:
Внутри системы mo.js onComplete тесно связан с логикой
таймлайна: завершение одного tween может инициировать следующий элемент
цепочки.
onRepeat активируется при переходе анимации на новый
цикл повторения. Это событие возникает только при установленном
параметре repeat > 0.
Поведение:
Использование onRepeat характерно для циклических
анимаций интерфейса, пульсаций, повторяющихся эффектов частиц и фоновых
движений.
Срабатывает при временной остановке анимации. Состояние текущего прогресса сохраняется, но обновления кадров прекращаются. Важно, что временная шкала не сбрасывается.
Основные особенности:
playАктивируется при возобновлении анимации после паузы. Система продолжает вычисление с последнего сохранённого состояния.
Особенности:
Вызывается при принудительной остановке анимации. В отличие от pause, состояние считается завершённым или прерванным.
Характерные черты:
Timeline в mo.js представляет собой контейнер, объединяющий несколько анимаций и синхронизирующий их жизненные циклы. Каждый элемент внутри timeline имеет собственные события, но также подчиняется общему времени выполнения.
В рамках timeline жизненный цикл приобретает дополнительный уровень сложности:
onComplete отдельных элементов не означает завершение
всей композицииTimeline также распространяет некоторые события на уровень выше, позволяя отслеживать общее состояние композиции.
Система жизненного цикла в mo.js синхронизирована с высокоточным таймером браузера. Использование requestAnimationFrame обеспечивает:
Дополнительно учитываются:
delay) как часть общего времениВажной особенностью является то, что обновление состояния не привязано к фиксированному интервалу времени, а вычисляется динамически на основе фактического delta-time между кадрами.
Комбинирование событий жизненного цикла позволяет строить сложные анимационные сценарии без внешнего управления состоянием.
Сценарий последовательной анимации:
onStart первой анимации инициирует подготовку
сценыonUpdate управляет промежуточными визуальными
эффектамиonComplete запускает следующую анимацию в цепочкеonRepeat используется для циклического возврата
состоянияПри построении сложных интерфейсных эффектов жизненный цикл становится основным механизмом координации:
Каждое событие выступает точкой расширения логики, позволяя интегрировать анимацию в более широкую систему взаимодействия без нарушения её внутреннего тайминга.