Ключевые кадры в Popmotion представляют собой способ описания сложной анимации через набор промежуточных состояний, между которыми библиотека автоматически интерполирует значения. Вместо одной пары «начало–конец» используется последовательность значений, позволяющая строить нелинейные, многосегментные анимации с управляемыми переходами.
Ключевой принцип заключается в том, что анимация рассматривается как функция времени, проходящая через заранее заданные точки. Каждая точка может иметь собственное значение, относительное положение на шкале времени и индивидуальную кривую интерполяции.
В Popmotion ключевые кадры задаются массивом значений. Каждый элемент массива описывает состояние анимации в определённый момент времени:
Минимальная форма записи ограничивается списком значений, где равномерное распределение интервалов берётся по умолчанию:
keyframes({
values: [0, 100, 50, 120],
duration: 2000
})
В этом случае библиотека равномерно распределяет ключевые состояния по времени, создавая три сегмента интерполяции.
Более точная настройка достигается через использование offsets. Они задаются в диапазоне от 0 до 1 и определяют, в какой момент времени должен быть достигнут соответствующий кадр.
keyframes({
values: [0, 100, 50],
times: [0, 0.3, 1],
duration: 2000
})
Здесь первый кадр фиксируется в начале, второй — на 30% длительности, третий — в конце. Это позволяет управлять ускорениями и замедлениями на уровне структуры анимации, а не только через easing.
Каждый участок между ключевыми кадрами интерполируется отдельно. Popmotion определяет промежуточные значения на основе типа данных:
Пример цветовой анимации:
keyframes({
values: ['#ff0000', '#00ff00', '#0000ff'],
duration: 3000
})
Цвета преобразуются в RGB-компоненты, после чего интерполяция выполняется отдельно для каждого канала.
Одним из ключевых преимуществ ключевых кадров является возможность задавать easing для каждого сегмента отдельно. Это позволяет строить сложные траектории движения с разной динамикой на каждом участке.
keyframes({
values: [0, 200, 100],
easings: ['easeIn', 'easeOut'],
duration: 2000
})
Каждый easing применяется к соответствующему промежутку между соседними кадрами. Таким образом, первый переход может быть ускоряющимся, а второй — замедляющимся.
Popmotion поддерживает анимацию объектов, что особенно важно при работе с UI-компонентами. При ключевых кадрах объект разбивается на отдельные свойства:
keyframes({
values: [
{ x: 0, y: 0 },
{ x: 100, y: 50 },
{ x: 200, y: 0 }
],
duration: 1500
})
Каждое свойство интерполируется независимо, что позволяет создавать сложные траектории движения без ручного расчёта промежуточных значений.
Ключевые кадры в Popmotion тесно связаны с общей временной моделью анимации. Внутренне библиотека использует прогресс от 0 до 1, который затем отображается на массив ключевых состояний.
Этот подход позволяет:
При необходимости можно создавать резкие переходы между состояниями, задавая одинаковые временные точки или отключая интерполяцию логикой значений. Например, дискретные изменения используются для переключения состояний UI без плавности:
keyframes({
values: ['hidden', 'visible', 'hidden'],
times: [0, 0.5, 0.5, 1],
duration: 1000
})
Здесь повторяющееся значение времени создаёт мгновенный переход между состояниями.
Ключевые кадры могут использоваться совместно с физическими анимациями Popmotion. В таком случае keyframes задаёт глобальную структуру движения, а физические модели уточняют поведение между точками.
Это позволяет создавать гибридные анимации, где:
При проектировании ключевых кадров важно мыслить не конечными состояниями, а траекторией изменения состояния во времени. Это приводит к следующей структуре работы:
Такой подход позволяет контролировать не только внешний вид анимации, но и её динамическую выразительность, что особенно важно в интерфейсной разработке и motion-дизайне.