Поддержка обратной совместимости в mo.js основана на принципе минимизации разрушительных изменений публичного API и сохранения предсказуемого поведения анимационных сущностей при обновлениях версии. Библиотека изначально проектировалась как инструмент декларативной анимации, где ключевым элементом является стабильность описаний tween- и timeline-структур, а не частота изменений интерфейса.
Основные сущности библиотеки — Shape,
Burst, Timeline, Tween —
сохраняют консистентную модель конфигурации через объектные литералы.
Это позволяет старым конфигурациям продолжать работать даже при
расширении функциональности.
Ключевые принципы:
duration,
delay, easing, repeat)Пример устойчивой модели:
const anim = new mojs.Tween({
duration: 1200,
delay: 200,
easing: 'ease.out',
onComplete() {
console.log('done');
}
});
Даже при добавлении новых возможностей движка, подобная структура продолжает интерпретироваться одинаково.
Важный механизм обратной совместимости связан с тем, как библиотека обрабатывает наследование параметров. Объекты анимации не мутируют входные конфигурации, а создают внутренние копии с нормализованными значениями.
Это позволяет:
Особое внимание уделяется объединению объектов:
const base = {
duration: 1000,
easing: 'linear'
};
const extended = {
...base,
duration: 1500,
stroke: 'red'
};
Даже если новые поля добавляются в более поздних версиях, механизм merge-логики не ломает поведение базовых параметров.
Подход к версионированию в библиотеке ориентирован на семантическую модель:
При изменениях поведения анимационного ядра используется стратегия:
Для обеспечения плавного перехода между версиями применяются алиасы. Старые названия параметров продолжают распознаваться и преобразуются в актуальные.
Примеры подхода:
angle может интерпретироваться как часть трансформации
rotateЛогика обработки конфигурации часто включает слой нормализации:
function normalize(config) {
return {
...config,
easing: mapEasing(config.easing || 'linear')
};
}
Исторически библиотека опирается на
requestAnimationFrame, CSS transforms и SVG-морфинг. Для
старых окружений используется деградация поведения:
setTimeout при отсутствии
requestAnimationFrameПоддержка старых браузеров достигается не через дублирование логики, а через:
В разных версиях библиотеки применялись различные форматы распространения:
Сохранение обратной совместимости достигается за счёт:
Пример использования в разных окружениях:
// ES Modules
import mojs from 'mo-js';
// UMD
const mojs = window.mojs;
Timeline является наиболее чувствительной частью системы, так как он управляет синхронизацией нескольких tween-объектов.
Старые таймлайны продолжают работать благодаря следующим принципам:
Даже при изменениях внутреннего планировщика времени сохраняется детерминированность:
const tl = new mojs.Timeline();
tl.add([
new mojs.Tween({ duration: 300 }),
new mojs.Tween({ delay: 100, duration: 500 })
]);
Система easing является одним из ключевых элементов совместимости. Ранние версии использовали строковые идентификаторы, позднее были добавлены функции и кастомные кривые.
Для поддержки старых проектов реализуется слой трансляции:
linear)Элементы вроде Shape и Burst имеют долгий
жизненный цикл API. Их параметры сохраняются в стабильной форме:
radiusscaleopacitystrokeWidthПри расширении функционала добавляются новые свойства, но старые остаются без изменений, что обеспечивает корректное воспроизведение старых эффектов без переписывания кода.
При изменениях внутренней архитектуры применяется постепенная миграция:
Такой подход исключает резкие разрывы между версиями и позволяет проектам с длительным жизненным циклом сохранять работоспособность без переписывания анимационных сценариев.