В основе системы временных преобразований mo.js лежит параметризация
изменения значения анимации во времени через easing-функции. Каждая
такая функция определяет характер интерполяции между начальным и
конечным состоянием анимационного параметра, преобразуя линейный
прогресс t ∈ [0, 1] в нелинейное значение.
Ключевая особенность встроенного набора easing в mo.js заключается в
унификации интерфейса: каждая функция представляется как объект с
вариантами направлений in, out,
inOut, что формирует три основные модели поведения
кривой.
В конфигурации анимационных сущностей mo.js easing задаётся через
параметр easing:
const tween = new mojs.Tween({
duration: 1000,
easing: mojs.easing.cubic.out,
onUpdate(progress) {
// progress уже модифицирован easing-функцией
}
});
Допускается использование строкового формата:
easing: 'cubic.out'
Или объектного доступа через пространство имён:
mojs.easing.back.inOut
В mo.js набор функций заимствует классическую модель Penner easing и расширяет её вариациями направлений. Основные группы включают:
Каждая группа определяет форму кривой ускорения и замедления, влияя на визуальную динамику анимации.
Линейная функция представляет равномерное изменение без ускорений и замедлений. В mo.js она используется как базовая контрольная модель поведения.
easing: mojs.easing.linear.none
Характеристика:
Sine easing использует тригонометрическую функцию синуса для плавного входа и выхода из состояния.
Доступные варианты:
mojs.easing.sin.in
mojs.easing.sin.out
mojs.easing.sin.inOut
Поведение:
inoutinOutИспользуется в интерфейсных переходах, где требуется отсутствие резких изменений скорости.
Эти семейства основаны на степенных функциях и различаются степенью кривой:
mojs.easing.quad.in
mojs.easing.quad.out
mojs.easing.quad.inOut
Обеспечивает мягкое ускорение и замедление.
mojs.easing.cubic.in
mojs.easing.cubic.out
mojs.easing.cubic.inOut
Более выраженная динамика по сравнению с quad, используется для заметных интерфейсных акцентов.
mojs.easing.quart.in
mojs.easing.quint.out
Характеризуются резким ускорением и сильным замедлением на краях диапазона.
Особенности:
Экспоненциальные функции создают наиболее агрессивные изменения скорости.
mojs.easing.expo.in
mojs.easing.expo.out
mojs.easing.expo.inOut
Характер:
Типичное применение связано с эффектами появления и исчезновения элементов.
Круговые функции основаны на геометрии окружности и обеспечивают физически интерпретируемую плавность.
mojs.easing.circ.in
mojs.easing.circ.out
mojs.easing.circ.inOut
Свойства:
Back-функции создают эффект «перелёта» за конечную точку с последующим возвратом.
mojs.easing.back.in
mojs.easing.back.out
mojs.easing.back.inOut
Математически добавляется коэффициент амплитуды overshoot.
Особенности:
Bounce имитирует поведение объекта при падении и последующих отскоках.
mojs.easing.bounce.in
mojs.easing.bounce.out
mojs.easing.bounce.inOut
Характеристика:
Наиболее часто применяется в декоративных анимациях и игровых интерфейсах.
Elastic создаёт эффект упругого колебания вокруг конечной точки.
mojs.easing.elastic.in
mojs.easing.elastic.out
mojs.easing.elastic.inOut
Свойства:
Используется для выразительных анимационных акцентов, требующих высокой степени визуальной «живости».
Каждая базовая функция в mo.js расширяется тремя модификаторами поведения:
Ускорение от нуля к максимальной скорости.
cubic.in
Характеризует постепенное «разгоняющееся» движение.
Замедление к финальной точке.
cubic.out
Наиболее распространённый вариант в интерфейсных переходах.
Комбинированная модель: ускорение в начале и замедление в конце.
cubic.inOut
Используется для симметричных анимационных циклов.
Внутренний механизм mo.js допускает использование кастомных кривых через cubic-bezier, которые могут сочетаться с предустановленными easing-моделями для построения гибридных эффектов.
easing: 'M0,0 C0.2,0.8 0.2,1 1,1'
Такая форма позволяет точно контролировать ускорение на каждом участке интервала.
В tween-анимациях easing влияет непосредственно на интерполяцию числовых значений, тогда как в shape-анимациях mo.js он управляет параметрами трансформации:
Применение одной и той же функции к разным параметрам даёт различный визуальный результат из-за контекста трансформации.
Систематизация выбора easing часто строится на функциональных ролях:
quad.out,
cubic.out, sin.outexpo.out,
back.outbounce.out,
elastic.outlinear.nonesin.inOut,
circ.inOutВсе easing-функции mo.js работают в нормализованном диапазоне времени
t ∈ [0,1]. Результирующее значение не обязательно линейно
связано с исходной функцией времени, что позволяет:
Внутренняя реализация использует предрасчитанные математические модели, минимизируя вычислительную нагрузку в момент рендеринга анимации.
При последовательных анимациях (timeline) easing может накладываться на каждый сегмент отдельно. Это формирует сложные кривые движения, где итоговая динамика определяется композицией нескольких функций.
Пример логики:
expo.outsin.inOutback.inРезультирующее движение приобретает многослойную динамическую структуру.