Первые публичные версии mo.js формировались вокруг идеи декларативной
анимации на Canvas и SVG с минимальным количеством кода. Архитектура
строилась на трёх базовых слоях: Tween,
Timeline и наборе визуальных примитивов
(Shape, Burst, Html,
Spriter).
В раннем API ключевым был подход конфигурационных объектов: анимация описывалась как структура параметров, а не как последовательность императивных вызовов. Это определило дальнейшую эволюцию библиотеки, но также создало проблему: при усложнении сцен конфигурации становились громоздкими и трудно поддерживаемыми.
В ранних версиях Tween выступал центральной единицей
времени. Любая анимация представляла собой либо одиночный
Tween, либо группу Tween внутри
Timeline.
Позднее архитектура стала смещаться в сторону композиции объектов:
Tween перестал быть единственным строительным
блокомTimeline получил роль координатора нескольких
сущностейShape и Burst стали самостоятельными
анимационными единицами с собственными жизненными цикламиЭто изменение упростило создание сложных сцен, но потребовало переработки логики синхронизации.
Одним из наиболее заметных направлений эволюции стали изменения в API визуальных примитивов.
Ранние версии Shape предполагали фиксированный набор
типов фигур, где расширение происходило через внутренние модификаторы.
Позднее структура стала более декларативной:
shape получил более строгую типизациюstroke, fill,
strokeWidthТакже изменился подход к анимации свойств: вместо неявных переходов через общий tween-параметр стало возможным явно анимировать каждое свойство.
Burst в ранней реализации был тесно связан с системой
частиц внутри библиотеки. В последующих версиях он стал более
независимым объектом:
Это изменение значительно повысило предсказуемость поведения сложных эффектов.
Timeline изначально представлял собой простую
контейнерную сущность, объединяющую несколько Tween.
Позднее он получил расширенную функциональность:
Одним из ключевых изменений стало уточнение порядка выполнения анимаций: ранние версии допускали неочевидные пересечения таймингов, тогда как более поздние стали строго детерминированными.
Система easing в mo.js эволюционировала от простых строковых идентификаторов к более структурированному описанию кривых.
В ранних версиях использовались:
ease.in, ease.out,
bounce)Позднее добавились:
Это изменение сделало анимации более предсказуемыми при сложных переходах.
Изначально mo.js распространялась как монолитный UMD-бандл,
ориентированный на подключение через <script>.
Позднее произошёл переход к более современному подходу:
import { Tween, Shape })Это повлияло на:
В ранних версиях mo.js DOM-ориентированные и canvas-ориентированные анимации имели различную внутреннюю реализацию.
Позднее произошло сближение моделей:
Особенно заметным стало улучшение производительности при большом количестве одновременно активных анимаций.
Система событий в mo.js также претерпела изменения.
Ранний API:
start,
complete)Позднее добавились:
update-хуки для отслеживания прогресса анимацииplay,
pause, stop, replay)Это сделало библиотеку более пригодной для интерактивных интерфейсов.
С ростом сложности анимационных сцен возникла необходимость оптимизации рендеринга.
Ключевые изменения:
Также была переработана система обновления состояния, что уменьшило
количество лишних вычислений при одновременной работе нескольких
Timeline.
В процессе развития mo.js несколько раз происходили изменения, нарушающие обратную совместимость:
duration и delay)Эти изменения часто требовали переписывания старых конфигураций, но упрощали дальнейшую поддержку библиотеки.
Система частиц в Burst и связанных эффектах
эволюционировала от фиксированных шаблонов к параметрической
генерации.
В ранней модели:
В более поздних версиях:
Некоторые ранние возможности библиотеки со временем были удалены или заморожены:
Причина изменений заключалась в стремлении к стабильности ядра и предсказуемому поведению в продакшене.
Эволюция mo.js характеризуется переходом от экспериментального набора визуальных инструментов к более структурированной системе анимационных объектов.
Ключевые направления изменений:
Эти изменения сформировали устойчивую архитектурную основу, на которой строится работа с библиотекой в современных проектах.