Tween в mo.js представляет собой базовый механизм интерполяции значений во времени, на котором строится большая часть анимационной логики библиотеки. Tween отвечает за плавное изменение числовых параметров между начальным и конечным состоянием с учётом временных функций, задержек и дополнительных модификаторов поведения анимации.
Tween выполняет роль низкоуровневого анимационного примитива. Любая анимация, независимо от сложности визуального эффекта, сводится к последовательности изменений значений во времени. Tween обеспечивает универсальный слой, который:
В отличие от высокоуровневых модулей, таких как Shape или Burst, Tween не занимается визуальным представлением. Он оперирует только математикой изменения значений.
Основой Tween является интерполяция — вычисление промежуточных значений между стартовой и конечной точкой на основе прогресса анимации.
При линейной интерполяции используется базовая зависимость:
x(t) = x_0 + (x_1 - x_0) t
где t изменяется от 0 до 1 в течение длительности
анимации.
Однако в mo.js значение t почти никогда не используется
напрямую. Оно преобразуется через easing-функции, которые изменяют
характер движения: ускорение, замедление, колебания.
Tween создаётся через конструктор mojs.Tween, которому
передаётся объект конфигурации:
const tween = new mojs.Tween({
duration: 1000,
delay: 0,
repeat: 0,
easing: 'linear',
onStart: function () {},
onUpdate: function (progress) {},
onComplete: function () {}
});
Ключевым параметром является duration, определяющий
длительность анимационного цикла в миллисекундах. Значение
progress, передаваемое в onUpdate,
нормализовано в диапазон от 0 до 1 и отражает текущее состояние
интерполяции.
Tween предоставляет набор параметров, влияющих на поведение временной шкалы:
duration Определяет длину одного цикла анимации. Чем больше значение, тем медленнее происходит интерполяция.
delay Задержка перед стартом анимации. Используется для синхронизации нескольких Tween в последовательности.
repeat Количество повторов анимации. При значении
-1 анимация становится бесконечной.
yoyo Определяет обратное проигрывание анимации после завершения цикла. При включении значение прогресса изменяется в прямом и обратном направлении.
Математически поведение yoyo можно представить как отражение функции прогресса:
t’ = 1 - t
для обратного хода.
Easing определяет характер изменения прогресса во времени. Вместо равномерного движения Tween может ускоряться, замедляться или комбинировать различные типы поведения.
В mo.js используются функции вида:
Каждая функция преобразует линейный прогресс t в
модифицированное значение e(t).
Пример нелинейного преобразования:
t’ = e(t)
где e(t) — произвольная easing-функция.
Tween используется как универсальный слой анимации для различных типов данных:
Числовые значения Наиболее частый сценарий: изменение координат, масштаба, прозрачности.
CSS-подобные свойства В рамках интеграции с DOM Tween может интерполировать значения, влияющие на стили элементов.
SVG-параметры Изменение атрибутов, таких как
stroke-dashoffset, transform, координаты
точек.
Объектные значения JavaScript Tween может работать с произвольными объектами, изменяя их свойства во времени.
Пример интерполяции объекта:
const tween = new mojs.Tween({
duration: 800,
onUpdate: function (p) {
const value = {
x: 100 * p,
opacity: 1 - p
};
console.log(value);
}
});
Tween работает на основе кадровой системы, синхронизированной с
requestAnimationFrame. Каждый тик анимации включает
несколько этапов:
onUpdateЖизненный цикл можно представить как последовательность состояний:
Tween предоставляет методы управления воспроизведением:
play() Запуск или возобновление анимации.
pause() Приостановка на текущем кадре без сброса состояния.
stop() Остановка с переходом в начальное состояние или сохранением текущего значения в зависимости от конфигурации.
reset() Сброс прогресса в начальную точку без запуска.
Эти методы позволяют интегрировать Tween в сложные сценарии управления анимацией, включая интерактивные интерфейсы и синхронизацию нескольких эффектов.
Tween поддерживает систему callback-функций, позволяющих реагировать на ключевые моменты:
Эти события формируют основу для построения реактивной анимационной логики.
Tween является фундаментом, на котором строятся более сложные модули. Shape, Burst и Timeline используют Tween как внутренний механизм управления временем и интерполяцией.
Timeline объединяет несколько Tween в единую последовательность, синхронизируя их выполнение и создавая сложные анимационные сценарии.
Таким образом, Tween выступает базовым вычислительным слоем, обеспечивающим единообразие поведения всех анимационных сущностей в системе mo.js.