SVG-путь (<path>) описывается строкой команд,
формирующих геометрию фигуры: M, L,
C, Q, A и другие. Каждая команда
задаёт сегмент кривой или линии, а вся строка определяет топологию
формы.
Морфинг возможен только тогда, когда движок анимации способен
сопоставить параметры одного пути с другим. В контексте Motion One
интерполяция выполняется через анимацию атрибута d, где
система пытается вычислить промежуточные состояния между двумя наборами
геометрических данных.
Ключевой принцип:
Путь можно рассматривать как последовательность числовых параметров:
M x y → стартовая точка
L x y → линия
C x1 y1, x2 y2, x y → кубическая кривая
При морфинге система должна сопоставить:
Если структуры отличаются, интерполяция становится приближённой.
d
в Motion OneMotion One позволяет анимировать SVG-атрибуты напрямую через функцию
animate.
import { animate } from "motion"
animate("path", {
d: [
"M10 80 Q 95 10 180 80",
"M10 80 Q 95 150 180 80"
]
}, {
duration: 1.2,
easing: "ease-in-out"
})
В этом случае происходит плавная трансформация квадратичной кривой, где изменяется контрольная точка.
При работе с более сложными контурами часто используются заранее подготовленные SVG-пути:
import { animate } from "motion"
const star = "M100,10 L120,80 L190,80 L130,120 L150,190 L100,145 L50,190 L70,120 L10,80 L80,80 Z"
const circle = "M100,20 A80,80 0 1,1 99.9,20 Z"
animate("path", {
d: [star, circle]
}, {
duration: 1.5,
easing: "ease-in-out"
})
Ключевая особенность:
A (arc) и сложные комбинации команд требуют более
аккуратной подготовкиКачество морфинга определяется подготовкой геометрии.
Для стабильного результата используется подход:
viewBoxПример типовой нормализации:
viewBoxНесоответствие координатных систем часто приводит к визуальным сдвигам.
Рекомендуемая структура:
<svg viewBox="0 0 200 200">
<path d="..." />
</svg>
Если один путь рассчитан в диапазоне 0–100, а другой
0–1000, интерполяция остаётся корректной математически, но
визуально выглядит неконтролируемо.
Морфинг часто применяется в UI для перехода между состояниями интерфейса.
import { animate } from "motion"
const menu = document.querySelector("path")
let opened = false
function toggle() {
opened = !opened
animate(menu, {
d: opened
? "M20 20 L180 180 M100 100 M180 20 L20 180"
: "M20 60 H180 M20 100 H180 M20 140 H180"
}, {
duration: 0.4,
easing: "ease-out"
})
}
Здесь происходит трансформация трёх линий в крест.
Motion One поддерживает ключевые кадры, где путь проходит через несколько промежуточных состояний.
animate("path", {
d: [
"M50 50 L150 50 L100 150 Z",
"M30 80 L170 80 L100 170 Z",
"M50 50 L150 50 L100 150 Z"
]
}, {
duration: 2,
easing: "ease-in-out"
})
Такой подход позволяет создавать циклические трансформации без резких скачков.
Часто morphing объединяется с эффектом рисования контура.
import { animate } from "motion"
animate("path", {
strokeDashoffset: [1, 0],
d: [
"M10 10 H190",
"M10 10 C50 100 150 0 190 190"
]
}, {
duration: 1.5
})
Типичный порядок эффектов:
SVG path morphing относится к операциям, требующим постоянного пересчёта геометрии.
Факторы влияния:
Практическая оптимизация:
При морфинге часто возникают типовые артефакты:
Причина:
Причина:
Причина:
Распространённый подход — перевод всех сегментов в кубические кривые Безье.
Преимущество:
SVG path часто используется как часть сложной анимационной сцены:
Пример последовательности:
Motion One позволяет синхронизировать анимации по времени, создавая согласованные переходы между несколькими элементами.
Типичный сценарий:
Замкнутые пути (Z в конце строки) требуют особого
внимания:
SVG path morphing используется не как декоративный эффект, а как способ передачи состояния:
Такая модель уменьшает когнитивный разрыв между состояниями UI и создаёт непрерывность восприятия.