Motion Design Principles — Web Animation

Motion Design Principles Motion Design bukan sekadar membuat sesuatu bergerak — ini tentang membuat gerakan yang bermakna, komunikatif, dan terasa alami…

Motion design adalah memutuskan kenapa sesuatu bergerak, berapa lama, dalam urutan apa, dan untuk siapa dia sebaiknya diam. Bayangin Bu Sri menyambut tamu di Homestay Kabut. Saat kamu memesan, dia mengangguk (tanda pesananmu didengar). Saat kamu bingung, dia menunjuk ke arah kamarmu. Lalu dia berjalan mengantarmu dari meja depan ke pintu kamar, jadi kamu gak tiba-tiba "muncul" di tempat lain. Dia gak menari di depanmu tanpa alasan, dan untuk tamu yang gampang pusing, dia cukup bicara pelan tanpa banyak gerak. Animasi di halaman pemesanannya harus sama.

🧪 Tebakan cepat: Kartu kamar masuk dalam 600 ms, dengan linear, bergeser 250 px. Kalau penilaian mulai dari 100 dan tiap masalah mengurangi 20, berapa skornya? Jawabannya ada di bagian "Menilai animasi dengan aturan".

Tiga alasan sesuatu boleh bergerak

Alasan Artinya Di halaman Bu Sri
Feedback (umpan balik) "aksimu diterima" tombol "2 malam" mengecil ke scale(0.96) selama 100 ms, total naik 4 px
Orientasi "lihat ke sini" dialog "Pesan Kamar Teras?" muncul di tengah, latarnya diredupkan
Kontinuitas "ini benda yang sama, cuma pindah" foto galeri meluncur 300 ms ke foto berikutnya, bukan langsung berganti

Kalau sebuah gerak gak masuk salah satu kolom itu, hapus. Apple Human Interface Guidelines (halaman Motion) menulisnya sebagai saran pertama: "Add motion purposefully, supporting the experience without overshadowing it."

12 prinsip animasi, dibawa ke UI

Dua belas prinsip ini dirumuskan Frank Thomas dan Ollie Johnston, animator Disney, di buku Disney Animation: The Illusion of Life (Abbeville Press, 1981), bab "The Principles of Animation". Untuk kartun, gerakannya dibesar-besarkan; di UI dipakai versi halusnya:

Prinsip Di UI Contoh di alur pemesanan
1. Squash and Stretch bentuk sedikit berubah saat ditekan tombol scale(0.96)
2. Anticipation gerak kecil sebelum aksi utama tombol mengecil dulu, baru dialog muncul
3. Staging satu fokus dalam satu waktu dialog di tengah, latar redup
4. Straight Ahead Action and Pose to Pose pose ke pose = keyframe; straight ahead = dihitung frame demi frame @keyframes kartu vs konfeti canvas
5. Follow Through and Overlapping Action bagian-bagian gak berhenti bersamaan kartu masuk berselang 60 ms
6. Slow In and Slow Out percepatan dan perlambatan, alias easing masuk ease-out, keluar ease-in
7. Arcs jalur melengkung untuk gerak jauh jarang dipakai di kartu kecil
8. Secondary Action gerak pendukung yang gak mencuri fokus titik-titik "menyimpan" di tombol
9. Timing durasi menentukan karakter 100 ms tekan, 300 ms kartu
10. Exaggeration sedikit dilebihkan supaya terbaca pantulan pegas kecil, hemat
11. Solid Drawing bentuk dan kedalaman tetap konsisten bayangan kartu yang dibalik 3D
12. Appeal enak dilihat, sesuai karakter hijau tenang Homestay Kabut, gak ada yang heboh

Anticipation adalah jawaban untuk "reaksi sebelum aksi utama": karakter jongkok dulu sebelum melompat. Ease in/out berbeda: itu soal percepatan di dalam satu gerak, bukan gerak tambahan sebelumnya.

Token Material 3 dan saran Apple

Material 3 memberi nama untuk easing dan durasi, jadi satu tim memakai angka yang sama (cara memilihnya ada di pelajaran Easing & Timing Functions):

Token Nilai
md.sys.motion.easing.emphasized kurva dua segmen; di token web ditulis cubic-bezier(0.2, 0, 0, 1)
md.sys.motion.easing.emphasized-decelerate (masuk) cubic-bezier(0.05, 0.7, 0.1, 1)
md.sys.motion.easing.emphasized-accelerate (keluar) cubic-bezier(0.3, 0, 0.8, 0.15)
md.sys.motion.easing.standard cubic-bezier(0.2, 0, 0, 1)
md.sys.motion.duration.short1 sampai short4 50, 100, 150, 200 ms
medium1 sampai medium4 250, 300, 350, 400 ms
long1 sampai long4 450, 500, 550, 600 ms

Saran Apple di halaman Motion yang paling sering kepakai untuk web: "Make motion optional.", "Aim for brevity and precision in feedback animations.", "In apps, generally avoid adding motion to UI interactions that occur frequently.", dan "Let people cancel motion." Artinya: tombol yang ditekan puluhan kali gak perlu memantul, dan tombol lain tetap bisa diklik selama animasi jalan.

Untuk durasi, Nielsen Norman Group (Page Laubheimer, 9 Februari 2020) menulis kebanyakan animasi UI ada di 100 sampai 500 ms, umpan balik sederhana (checkbox, toggle) sekitar 100 ms, jendela modal 200 sampai 300 ms, dan "At 500ms, animations start to feel like a real drag for users." Jadi micro-interaction (tombol, tooltip) ada di 100 sampai 300 ms.

Koreografi alur pemesanan

Koreografi = urutan dan jeda antar gerak. Alur Bu Sri dari tombol malam sampai toast:

Waktu Yang bergerak Durasi, easing Alasan
0 ms tombol "2 malam" mengecil, warnanya jadi hijau 100 ms ease-out, warna 150 ms feedback
0 ms total jadi Rp 700.000, naik 4 px 200 ms ease-out feedback
klik "Pesan kamar" dialog masuk, latar redup 200 ms ease-out orientasi
klik "Ya, pesan" dialog keluar 150 ms ease-in kontinuitas
+150 ms toast masuk 200 ms ease-out feedback
+350 ms bar 5 detik berjalan 5.000 ms linear waktu tersisa

Aturannya: satu fokus dalam satu waktu (toast baru masuk setelah dialog keluar), yang keluar lebih cepat dari yang masuk (150 ms vs 200 ms), dan gak ada gerak yang mengunci tombol.

Gerak dan aksesibilitas

Sebagian orang punya gangguan vestibular (organ keseimbangan di telinga dalam). Menurut penjelasan WCAG, gerak yang gak perlu, seperti parallax atau elemen yang ikut bergeser saat di-scroll, bisa memicu pusing, mual, dan sakit kepala. Itu alasan media query prefers-reduced-motion ada. Dua kriteria WCAG 2.2 yang mengatur gerak:

@media (prefers-reduced-motion: reduce) {
  .room, .modal, .toast {
    animation-name: muncul;          /* geraknya dibuang... */
    animation-duration: 150ms;       /* ...tinggal fade 150 ms */
  }
  @keyframes muncul { from { opacity: 0; } }
}

"Kurangi gerakan" bukan "matikan semua": perubahan keadaannya tetap terlihat (fade 150 ms), yang dibuang perpindahannya.

Menilai animasi dengan aturan

Latihannya mengubah saran di atas jadi tiga pemeriksaan sederhana:

function evaluateAnimation(props) {
  const issues = [];
  if (props.duration > 500) issues.push('too slow');            // Timing: lewat 500 ms terasa menyeret
  if (props.easing === 'linear') issues.push('use easing curve'); // Slow In and Slow Out
  if (props.distance > 200) issues.push('too much movement');    // gerak besar, risiko vestibular
  return { score: 100 - issues.length * 20, issues };            // hasDelay gak dinilai
}
Masukan issues score
300 ms, ease-out, 100 px [] 100
600 ms, linear, 250 px tiga-tiganya 40
400 ms, linear, 150 px ["use easing curve"] 80
501 ms, ease-out, 201 px ["too slow","too much movement"] 60

Itu jawaban tebakannya: 40. Perhatikan >: 500 ms dan 200 px masih lolos, 501 dan 201 sudah gak.

⚠️ Jebakan yang sering ketemu

TL;DR: Gerak harus punya alasan: feedback, orientasi, atau kontinuitas (Apple HIG Motion: "Add motion purposefully", "Make motion optional", "Let people cancel motion"). 12 prinsip dari Frank Thomas dan Ollie Johnston, Disney Animation: The Illusion of Life (1981): Squash and Stretch, Anticipation (gerak kecil sebelum aksi utama), Staging, Straight Ahead and Pose to Pose, Follow Through and Overlapping Action, Slow In and Slow Out, Arcs, Secondary Action, Timing, Exaggeration, Solid Drawing, Appeal. Token Material 3: easing emphasized, emphasized-decelerate, emphasized-accelerate, standard; durasi short1 sampai short4 (50 sampai 200 ms), medium1 sampai medium4 (250 sampai 400 ms), long1 sampai long4 (450 sampai 600 ms). Micro-interaction 100 sampai 300 ms; lewat 500 ms terasa menyeret (NN/g). Koreografi: satu fokus dalam satu waktu, keluar lebih cepat dari masuk. Gangguan vestibular membuat gerak besar memicu pusing dan mual: hormati prefers-reduced-motion (fade 150 ms, tanpa perpindahan); WCAG 2.3.3 (AAA) gerak dari interaksi bisa dimatikan, WCAG 2.2.2 (A) gerak otomatis lebih dari 5 detik butuh jeda. Latihan: duration > 500 "too slow", easing === "linear" "use easing curve", distance > 200 "too much movement", skor 100 dikurangi 20 per masalah.

Yang akan kamu pelajari