Оригинальное название: Morphing & Sequenced Animations

Создавайте завораживающие трансформации формы и хореографические мультиэлементные анимации.

Время: 20 минут Сложность: продвинутый

Что вы будете создавать

Динамическая последовательность, где формы превращаются друг в друга, в то время как текст раскрывается с ошеломляющим временем.

Q Q
Shape морфинг с шатким текстом reveal
Q

Особенности, покрытые

  • Формирование — плавные переходы между различными формами
  • Ударная анимация — последовательное время для нескольких элементов
  • Цветовые переходы — анимированные градиентные изменения цвета
  • Маска раскрывает — кинематографические эффекты салфетки и радужной оболочки глаза
  • Хореографические последовательности — точно рассчитанный по времени многоэлементный танец

Часть 1: Форма морфинга

Шаг 1: Создайте форму источника

  1. Создайте круг в центре:
    • Радиус: 80
    • Цвет: #3b82f6 (синий)
    • Position: (400, 300)
const circle = app.create('circle', {
  x: 400, y: 300,
  radius: 80,
  color: '#3b82f6'
});

Шаг 2: Создайте целевую форму

  1. Создайте звезду (будет мишенью для морфов):
    • Точки: 5
    • Радиус: 100
    • Цвет: #f59e0b (янтарь)
    • Position: (400, 300)
const star = app.create('star', {
  x: 400, y: 300,
  points: 5,
  radius1: 100,
  radius2: 40,
  color: '#f59e0b'
});

Шаг 3: Добавьте морфологию

Отношение morphs_to создает плавные переходы формы:

app.addRelation(circle.data.id, star.data.id, 'morphs_to', {
  duration: 1.5,
  easing: 'easeInOut',
  morphColor: true,   // Also transition colors
  morphSize: true     // Also transition size
});

Шаг 4: Цепочка множественных морфов

Создание морфинговой последовательности: Круг → Звезда → Треугольник → Круг

const shapes = [];

// Circle
shapes.push(app.create('circle', {
  x: 400, y: 300, radius: 80, color: '#3b82f6'
}));

// Star
shapes.push(app.create('star', {
  x: 400, y: 300, points: 5, radius1: 100, radius2: 40,
  color: '#f59e0b', opacity: 0
}));

// Triangle
shapes.push(app.create('triangle', {
  x: 400, y: 300, radius: 90,
  color: '#10b981', opacity: 0
}));

// Hexagon (back to geometric)
shapes.push(app.create('polygon', {
  x: 400, y: 300, sides: 6, radius: 85,
  color: '#8b5cf6', opacity: 0
}));

// Chain morphs with delays
for (let i = 0; i < shapes.length - 1; i++) {
  app.addRelation(shapes[i].data.id, shapes[i + 1].data.id, 'morphs_to', {
    duration: 1.2,
    delay: i * 1.5,  // Stagger start times
    easing: 'easeInOut',
    morphColor: true
  });
}

// Loop back to first shape
app.addRelation(shapes[shapes.length - 1].data.id, shapes[0].data.id, 'morphs_to', {
  duration: 1.2,
  delay: (shapes.length - 1) * 1.5,
  easing: 'easeInOut',
  morphColor: true
});

Часть 2: Раскрытие текста

Шаг 5: Создайте коллаж писем

const collage = app.letterCollage.create('TRANSFORM', {
  style: 'gradient',
  gradientPalette: 'cyberpunk',
  gradientDirection: 'horizontal',
  fontSize: 64,
  x: 400, y: 500
});

Шаг 6: Примените ступенчатую анимацию

app.letterCollage.applyStaggeredAnimation(collage.collageId, {
  effect: 'fadeSlideUp',
  staggerDelay: 0.06,    // 60ms between letters
  duration: 0.5,
  sequence: 'center',     // Start from center, expand outward
  easing: 'easeOut'
});

Шаблоны последовательностей

Шаблон Эффект
linearQ Слева направо
reverseQ Справа налево
centerQ Центр наружу
randomQ Случайный приказ
waveQ Время синих волн
fibonacciQ Естественный ритм

Часть 3: Маска раскрывает

Шаг 7: Добавьте драматическое открытие

Раскройте форму морфинга с эффектом радужной оболочки:

// Apply animated mask to the shape container
app.applyAnimatedMask(shapes[0], 'iris', {
  startTime: 0,
  duration: 0.8,
  easing: 'easeOut'
});

Шаг 8: Откройте для себя текст

// Reveal text with horizontal wipe
app.applyAnimatedMask(collage.group, 'wipeLeft', {
  startTime: 0.5,  // Start after shape reveals
  duration: 0.6,
  easing: 'easeInOut'
});

Доступные предустановки маски

Предустановленный Эффект
irisQ Круг расширяется от центра
wipeLeftQ Горизонтальное открытие слева
wipeUpQ Вертикальное раскрытие снизу
starQ Форма звезды расширяется
heartQ Форма сердца расширяется
curtainHorizontalQ Открывается от центра
diagonalWipeQ Раскрытая

Часть 4: Полная хореография

Полный сценарий анимации

// === SETUP ===
app.setCanvasSize({ width: 800, height: 600 });
app.setBackgroundColor('#0f172a');

// === MORPHING SHAPES ===
const shapeColors = ['#3b82f6', '#f59e0b', '#10b981', '#8b5cf6'];
const shapeTypes = ['circle', 'star', 'triangle', 'polygon'];

const mainShape = app.create('circle', {
  x: 400, y: 250,
  radius: 80,
  color: shapeColors[0]
});

// Keyframe the shape through color transitions
app.addAnimation(mainShape.data.id, [
  { time: 0, properties: { fillColor: '#3b82f6', scale: 1 } },
  { time: 1.5, properties: { fillColor: '#f59e0b', scale: 1.2 }, easing: 'easeInOut' },
  { time: 3, properties: { fillColor: '#10b981', scale: 0.9 }, easing: 'easeInOut' },
  { time: 4.5, properties: { fillColor: '#8b5cf6', scale: 1.1 }, easing: 'easeInOut' },
  { time: 6, properties: { fillColor: '#3b82f6', scale: 1 }, easing: 'easeInOut' }
]);

// Add rotation for visual interest
app.addAnimation(mainShape.data.id, [
  { time: 0, properties: { rotation: 0 } },
  { time: 6, properties: { rotation: 360 }, easing: 'linear' }
]);

// === IRIS REVEAL FOR SHAPE ===
app.applyAnimatedMask(mainShape, 'iris', {
  startTime: 0,
  duration: 0.6,
  easing: 'easeOut'
});

// === STAGGERED TEXT ===
const title = app.letterCollage.create('TRANSFORM', {
  style: 'tile',
  palette: 'neon',
  fontSize: 56,
  x: 400, y: 480
});

app.letterCollage.applyStaggeredAnimation(title.collageId, {
  effect: 'popIn',
  staggerDelay: 0.05,
  duration: 0.4,
  sequence: 'center',
  easing: 'elastic'
});

// === ORBITING ACCENTS ===
const orbitColors = ['#f472b6', '#34d399', '#fbbf24'];
orbitColors.forEach((color, i) => {
  const dot = app.create('circle', {
    x: 400, y: 250,
    radius: 6,
    color: color
  });

  app.addRelation(dot.data.id, mainShape.data.id, 'orbits', {
    radius: 120 + i * 25,
    speed: 0.4 - i * 0.1,
    phase: i * (Math.PI * 2 / 3)
  });

  // Fade in the orbiting dots
  app.addAnimation(dot.data.id, [
    { time: 0.8 + i * 0.2, properties: { opacity: 0, scale: 0 } },
    { time: 1.2 + i * 0.2, properties: { opacity: 1, scale: 1 }, easing: 'elastic' }
  ]);
});

// === CAMERA MOVEMENT ===
app.addRelation('camera', null, 'camera_animates', {
  duration: 6,
  loop: true,
  keyframes: [
    { time: 0, zoom: 1, center: [400, 300] },
    { time: 1.5, zoom: 1.15, center: [400, 280], easing: 'easeOut' },
    { time: 3, zoom: 1.05, center: [400, 320], easing: 'easeInOut' },
    { time: 4.5, zoom: 1.1, center: [400, 300], easing: 'easeInOut' },
    { time: 6, zoom: 1, center: [400, 300], easing: 'easeOut' }
  ]
});

// === PLAY ===
app.playKeyframeTimeline(6, true);

Настройки экспорта

Для лучших результатов с анимацией морфинга:

Настройка Ценность Причина
Формат WebM Лучшее качество для градиентов
Рамочная ставка 60 fps Мягкие морфы
Продолжительность 6 секунд Полный цикл цикла
Качество Высокий Сохранить цветовые переходы

Pro Советы

Время переключения — Начните следующую анимацию 0,1-0,2 перед предыдущими концами для бесперебойного потока.

Используйте дополнительные цвета Формы лучше всего выглядят при переходе между цветами, которые хорошо работают вместе.

Последовательность центра для удара — Шаг center привлекает внимание к середине текста.

Матч раскрывает содержание — Используйте iris для круговых фигур, wipeLeft для текста.


Вариации

Визуализация данных Morph

// Bar chart to pie chart transition
const bars = createBarChart(data);
const pie = createPieChart(data);

app.addRelation(bars.data.id, pie.data.id, 'morphs_to', {
  duration: 2,
  easing: 'easeInOut'
});
// Logo parts appear in sequence
const logoParts = [shape1, shape2, shape3, text];

logoParts.forEach((part, i) => {
  app.addAnimation(part.data.id, [
    { time: i * 0.3, properties: { opacity: 0, scale: 0.5 } },
    { time: i * 0.3 + 0.4, properties: { opacity: 1, scale: 1 }, easing: 'elastic' }
  ]);
});

Следующие шаги

  • [Physics Animation] (/tutorials/physics-animation) — Упругие эффекты
  • [Карточные анимации] (/tutorials/map-animation) — Географические данные
  • [Masking System] (/features/masking) — Расширенные методы раскрытия