В Popmotion конфигурационный объект выступает центральным механизмом описания анимации. Он определяет поведение движения, параметры интерполяции, физическую модель, временные характеристики и способы обновления значений. Вместо императивного управления кадрами разработчик описывает желаемое состояние через набор параметров, которые движок интерпретирует в процессе выполнения.
Конфигурации используются во всех основных примитивах библиотеки:
animate, tween, spring,
decay, keyframes, а также в более
низкоуровневых функциях. Несмотря на различия в моделях движения,
структура объектов сохраняет общие принципы композиции.
Большинство конфигураций Popmotion строится вокруг набора универсальных полей, которые определяют старт, конец и управление процессом анимации.
from — начальное значение анимацииto — конечное значение или набор конечных значенийanimate({
from: 0,
to: 100
});
Поле to может принимать различные формы:
animate({
from: { x: 0, y: 0 },
to: { x: 300, y: 150 }
});
При работе с объектами происходит поосевая интерполяция, где каждое свойство анимируется независимо.
Параметр duration задаёт общее время выполнения анимации
в миллисекундах.
tween({
from: 0,
to: 1,
duration: 800
});
Длительность влияет на характер движения в параметрических анимациях, но в физических моделях (например, spring) может игнорироваться или использоваться косвенно.
delay определяет паузу перед началом анимации.
animate({
from: 0,
to: 100,
duration: 500,
delay: 200
});
Задержка часто применяется при построении последовательностей и каскадных эффектов.
Параметр ease управляет распределением прогресса
анимации во времени. Он определяет, как изменяется скорость перехода от
начального значения к конечному.
import { easeInOut } from '@popmotion/easing';
animate({
from: 0,
to: 100,
duration: 1000,
ease: easeInOut
});
Типичные категории easing-функций:
Easing влияет только на временную интерполяцию, не изменяя физическую модель движения.
В конфигурациях, основанных на физике, поведение задаётся через начальные условия и параметры среды.
Spring-модель описывает движение через упругость и демпфирование.
Ключевые параметры:
stiffness — жёсткость пружиныdamping — коэффициент затуханияmass — масса объектаvelocity — начальная скоростьrestDelta — порог остановки по смещениюrestSpeed — порог остановки по скоростиspring({
from: 0,
to: 300,
stiffness: 120,
damping: 20,
mass: 1
});
Высокая жёсткость увеличивает скорость приближения к цели, а высокий damping снижает колебания.
Decay описывает инерционное движение с постепенным затуханием.
velocity — начальная скоростьdeceleration — коэффициент замедленияdecay({
from: 0,
velocity: 500,
deceleration: 0.95
});
Decay не требует конечного значения to, поскольку
движение завершается естественным образом при снижении скорости до
порога.
Keyframes-конфигурация задаёт последовательность значений, между которыми происходит интерполяция.
Основные параметры:
values — массив ключевых значенийtimes — временные точки (нормализованные от 0 до
1)duration — общая длительностьease — easing для каждого сегмента или глобальноkeyframes({
values: [0, 100, 50, 200],
times: [0, 0.3, 0.6, 1],
duration: 1200
});
При отсутствии times значения распределяются
равномерно.
Popmotion поддерживает анимацию сложных структур, где конфигурация описывает не только скалярные значения, но и вложенные объекты.
animate({
from: {
x: 0,
y: 0,
opacity: 0
},
to: {
x: 400,
y: 200,
opacity: 1
}
});
Каждое поле интерполируется независимо, что позволяет комбинировать трансформации и визуальные эффекты в одном конфигурационном объекте.
animate({
from: [0, 50],
to: [300, 200]
});
Массивы интерполируются по индексам, что используется для координатных систем, кривых и наборов параметров.
Конфигурации Popmotion часто включают колбэки, которые управляют реакцией на изменение состояния анимации.
onUpdate — вызывается при каждом обновлении
значенияonComplete — вызывается при завершенииonPlay — при запускеonStop — при остановкеanimate({
from: 0,
to: 100,
onUpdate: (v) => console.log(v),
onComplete: () => console.log('done')
});
Колбэки позволяют интегрировать анимацию с DOM, Canvas или state-менеджерами.
Конфигурационные объекты часто выносятся в отдельные переменные для повторного использования и композиции.
const fadeConfig = {
from: 0,
to: 1,
duration: 300,
ease: linear
};
animate(fadeConfig);
Такая структура позволяет строить библиотеку шаблонов анимации и стандартизировать поведение интерфейса.
Конфигурации могут комбинироваться через расширение объектов или функции-посредники.
const base = {
duration: 500,
ease: easeInOut
};
animate({
...base,
from: 0,
to: 100
});
Композиция используется для построения дизайн-систем движения, где базовые параметры унифицируют поведение всех анимаций.
Некоторые параметры могут вычисляться во время выполнения через функции.
animate({
from: 0,
to: (latest) => latest + 100,
duration: 600
});
Функциональные значения позволяют создавать реактивные переходы, зависящие от текущего состояния системы.
Конфигурации включают механизмы управления остановкой и завершением анимации.
restSpeed, restDelta)Физические модели используют математические условия стабилизации, тогда как временные модели ориентируются на длительность.
Неправильно заданные конфигурации приводят к предсказуемому поведению:
from приводит к использованию текущего
значенияto игнорируются или приводят к
NaN-поведениюfrom и to вызывает
частичную интерполяциюСистема стремится к деградации поведения без полного прерывания выполнения.
Конфигурационные объекты проектируются как расширяемая система, допускающая добавление пользовательских параметров. Такие параметры игнорируются ядром, но могут использоваться внешними слоями логики.
animate({
from: 0,
to: 100,
customFlag: true,
metadata: {
layer: 'ui'
}
});
Это позволяет интегрировать Popmotion в архитектуры, где анимации являются частью более сложной системы управления состоянием.