Tutorial: Animasi Morphing & Sequenced

Membuat transformasi bentuk memikat dan koreografi animasi multi- elemen.

    • Waktu: * * 20 menit
    • Kesulitan: * * Tingkat lanjut

What You 'll Create

Urutan dinamis di mana bentuk Morphing menjadi satu sama lain sementara teks mengungkapkan dengan waktu terhuyung-huyung.

Shape berubah dengan teks terhuyung-huyung mengungkapkan 1

Fitur Terselubung

      • Shape morphing * * - transisi mulus antara bentuk yang berbeda
      • Animasi Staggered * * - Sequenced waktu untuk beberapa elemen
      • Warna transisi * * - Perubahan warna gradien animasi
      • Mask mengungkapkan * * - Cinematic menghapus dan efek iris
      • Urutan koreografi * * - Tepat waktu multi- elemen tari

Bagian 1: Bentuk Morphing

Langkah 1: Buat Bentuk Sumber

  1. Buat lingkaran di tengah:
    • Radius: * * 80 * *
    • Warna: # 0 # (biru)
    • Position: (400, 300)
const circle = app.create('circle', {
  x: 400, y: 300,
  radius: 80,
  color: '#3b82f6'
});

Langkah 2: Buat Bentuk Target

  1. Membuat bintang (akan menjadi target morphs):
    • Poin: * * 5 * *
    • Radius: * * 100 * *
    • Warna: # 0 (amber)
    • Position: (400, 300)
const star = app.create('star', {
  x: 400, y: 300,
  points: 5,
  radius1: 100,
  radius2: 40,
  color: '#f59e0b'
});

Langkah 3: Tambah Relasi Morph

Hubungan menciptakan perubahan bentuk halus:

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
});

Step 4: Chain Multiple Morphs

Buat urutan morphing, Lingkaran Bintang Bintang Segitiga

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
});

Bagian 2: Staggered Teks Mengungkapkan

Langkah 5: Buat Koleksi Huruf

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

Langkah 6: Terapkan Animasi Terstagged

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'
});

Pola Urutan

Pola Efek
linear Kiri ke kanan
reverse Kanan ke kiri
center Tengah luar
random Urutan acak
wave Waktu gelombang sinus
fibonacci Ritme alami

Bagian 3: Ekspeksi Topeng

Step 7: Add Dramatic Reveal

Mengungkapkan bentuk morphing dengan efek iris:

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

Langkah 8: Hapus Pengungkapan Teks

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

Presets Topeng Tersedia

Preset Efek
iris Lingkaran memperluas dari pusat
wipeLeft Tampilkan horisontal dari kiri
wipeUp Vertikal mengungkapkan dari bawah
star Bentuk bintang memperluas
heart Bentuk jantung memperluas
curtainHorizontal Buka dari tengah
diagonalWipe Sudut mengungkapkan

Bagian 4: Koreografi Lengkap

Skrip Animasi Penuh

// === 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);

Ekspor Pengaturan

Untuk hasil terbaik dengan animasi morphing:

Tatanan Nilai Alasan
Format WebM Kualitas terbaik untuk gradiasi
Laju Bingkai 60 fps Smoother morphs
Durasi 6 detik Siklus loop penuh
Kualitas Tinggi Pertahankan transisi warna

Pro Tips

    • Timing tumpang tindih * * - Mulai animasi berikutnya 0.1-0.2 sebelum sebelumnya berakhir untuk aliran mulus.
    • Gunakan warna komplement * * - Shape morphs terlihat terbaik ketika transisi antara warna yang bekerja dengan baik bersama-sama.
    • Pusat urutan untuk dampak * * - Pola terhuyung-huyung menarik perhatian di tengah teks.
    • Cocok mengungkapkan ke isi * * - Gunakan untuk bentuk lingkaran, 1 untuk teks.

Variabel

Data Visualisasi 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' }
  ]);
});

Langkah Berikutnya

  • Font color = “# 404040” Analisis Animation:
  • [Animasi Peta] (S00] - Menceritakan data geografis
  • Font color = “# DF01D7” (MAsking System) - Advanced mengungkapkan teknik