Документирование анимационной системы в Motion One строится вокруг описания минимального набора примитивов, из которых формируются все анимационные сценарии: ключевые кадры, свойства, тайминг, управление прогрессом и взаимодействие с внешними событиями. Система проектируется как декларативная надстройка над Web Animations API, сохраняя совместимость с браузерной моделью исполнения анимаций и добавляя единый интерфейс управления.
Документация такой системы требует строгого разделения уровней абстракции:
Каждый уровень фиксируется отдельно, поскольку объединение этих слоёв в описании приводит к потере воспроизводимости поведения.
В основе системы лежит функция animate, принимающая
описание цели, набора свойств и параметров времени. Документирование
этой функции опирается на формализацию сигнатуры и семантики
аргументов.
animate(
target: Element | Element[],
keyframes: Keyframes,
options?: AnimationOptions
)
Целевой объект может быть DOM-узлом или коллекцией узлов. Документация фиксирует следующие особенности:
Animation-контроллерКлючевой аспект документирования — поведение при множественном таргетинге, так как именно здесь возникают различия между библиотечными реализациями.
Ключевые кадры описываются как объект или массив объектов. Документирование требует строгого описания приоритетов интерполяции.
{
opacity: [0, 1],
transform: ["translateY(20px)", "translateY(0px)"]
}
[
{ opacity: 0, transform: "translateY(20px)" },
{ opacity: 1, transform: "translateY(0px)" }
]
В документации фиксируются различия:
Особое внимание уделяется нормализации значений. Система автоматически приводит CSS-значения к интерполируемому виду, включая единицы измерения и цветовые пространства.
Тайминг описывается через набор параметров, определяющих поведение анимации во времени.
Основные поля:
durationdelayendDelayeasingrepeatdirectionДокументирование требует строгого описания взаимодействия этих параметров.
duration: number | string
Числовое значение трактуется как миллисекунды. Строковое значение может использоваться в контексте предопределённых профилей.
delay определяет смещение начала анимации относительно
момента вызова. В документации фиксируется важный аспект: задержка
влияет только на стартовую фазу, но не изменяет длительность жизненного
цикла экземпляра.
Easing описывает кривую распределения прогресса анимации.
Поддерживаются следующие типы:
Документирование easing требует формализации входа и выхода функции:
(progress: number) => number
[0, 1]Особое внимание уделяется тому, что easing применяется к нормализованному времени, а не к абсолютному таймингу.
Результат вызова animate возвращает контроллер, который
инкапсулирует состояние анимации.
Основные методы:
playpausestopfinishreverseДокументирование этих методов фиксирует их влияние на внутреннее состояние:
Переводит анимацию в активное состояние. Если прогресс был остановлен, восстановление происходит с сохранённой позиции.
Фиксирует текущее состояние без изменения прогресса. Важно, что временная шкала замораживается, но не пересоздаётся.
Полностью прекращает выполнение и сбрасывает состояние к начальному значению.
Таймлайн представляет собой систему синхронизации нескольких анимаций.
Документирование таймлайна включает:
Каждая анимация получает относительное время старта, вычисляемое относительно базового времени таймлайна.
timeline.add(target, keyframes, options)
Особенность системы заключается в том, что таймлайн не создаёт отдельного потока исполнения — все расчёты происходят в едином цикле обновления.
Система поддерживает интерполяцию различных типов данных:
Документирование интерполяции требует указания стратегии преобразования:
Прямое линейное преобразование:
result = a + (b - a) * t
Строки парсятся на компоненты, после чего применяется поэлементная интерполяция.
Цветовые значения нормализуются в RGBA-пространство перед вычислением промежуточных состояний.
Spring-модель добавляет физически-ориентированное поведение.
Документация описывает параметры:
Поведение описывается дифференциальным уравнением второго порядка, моделирующим систему пружина–демпфер.
m * x'' + c * x' + k * x = 0
Документирование требует фиксации:
Анимации могут быть связаны с прокруткой страницы.
Документирование scroll-системы включает:
Scroll становится источником времени, заменяя requestAnimationFrame-цикл. В этом режиме анимация перестаёт быть автономной и становится реактивной относительно внешнего состояния.
Документирование TypeScript-слоя фиксирует контракт между runtime и пользовательским кодом.
Основные интерфейсы:
AnimationOptionsKeyframesAnimationControlsОсобое внимание уделяется строгой типизации easing-функций и поддержке перегрузок.
type Easing = (t: number) => number
Контракт гарантирует, что любая функция easing должна быть чистой и детерминированной.
Документация анимационной системы обязательно фиксирует граничные случаи:
animate на одном элементе создают
независимые экземплярыИсполнение анимаций основано на цикле обновления, синхронизированном
с requestAnimationFrame.
Документирование включает:
Каждый кадр проходит стадии:
Анимации могут комбинироваться через:
Документирование композиции требует описания приоритетов:
Документирование включает описание внутренних инструментов диагностики:
Эта модель используется для воспроизводимости багов и анализа производительности.
Система оптимизирует выполнение через:
Документирование производительности фиксирует зависимость между количеством одновременно активных анимаций и нагрузкой на main thread.
Анимационная модель сохраняет совместимость с Web Animations API:
AnimationЭто позволяет документировать систему как расширение, а не замену базового стандарта браузера.