12 Principles Of Animation

raphaelsalaja/skill/skills/12-principles-of-animation

作者 raphaelsalajadc9eef22f136MIT40 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫6 個月前更新

Audit animation code against Disney's 12 principles adapted for web. Use when reviewing motion, implementing animations, or checking animation quality. Outputs file:line findings.

AI 產生的概覽

依據改編自迪士尼十二項動畫原則的網頁規則審查動畫程式碼,輸出 file:line 形式的發現。

功能
此技能依照改編自迪士尼十二項動畫原則的網頁介面規則審查動畫程式碼。它會讀取指定檔案,依時間、緩動、物理與舞台呈現等規則類別逐項檢查,並以 file:line 格式輸出問題,接著提供含數量與嚴重程度的彙總表。此技能僅有指示,不含指令碼或素材。
適用情境
適合審查動態效果程式碼、實作動畫或檢查網頁專案動畫品質的情境。適合在程式碼審查中依時間、緩動、物理與舞台呈現規則核對具體檔案。
執行需求
不需要指令碼或套件,但需要存取受審查的動畫原始檔。由代理讀取這些檔案並輸出文字形式的審查結果。

12 Principles of Animation

Review animation code for compliance with Disney's 12 principles adapted for web interfaces.

How It Works

  1. Read the specified files (or prompt user for files/pattern)
  2. Check against all rules below
  3. Output findings in file:line format

Rule Categories

PriorityCategoryPrefix
1Timingtiming-
2Easingeasing-
3Physicsphysics-
4Stagingstaging-

Rules

Timing Rules

timing-under-300ms

User-initiated animations must complete within 300ms.

Fail:

css
.button { transition: transform 400ms; }

Pass:

css
.button { transition: transform 200ms; }
timing-consistent

Similar elements must use identical timing values.

Fail:

css
.button-primary { transition: 200ms; }.button-secondary { transition: 150ms; }

Pass:

css
.button-primary { transition: 200ms; }.button-secondary { transition: 200ms; }
timing-no-entrance-context-menu

Context menus should not animate on entrance (exit only).

Fail:

tsx
<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} />

Pass:

tsx
<motion.div exit={{ opacity: 0 }} />

Easing Rules

easing-entrance-ease-out

Entrances must use ease-out (arrive fast, settle gently).

Fail:

css
.modal-enter { animation-timing-function: ease-in; }

Pass:

css
.modal-enter { animation-timing-function: ease-out; }
easing-exit-ease-in

Exits must use ease-in (build momentum before departure).

Fail:

css
.modal-exit { animation-timing-function: ease-out; }

Pass:

css
.modal-exit { animation-timing-function: ease-in; }
easing-no-linear-motion

Linear easing should only be used for progress indicators, not motion.

Fail:

css
.card { transition: transform 200ms linear; }

Pass:

css
.progress-bar { transition: width 100ms linear; }
easing-natural-decay

Use exponential ramps, not linear, for natural decay.

Fail:

ts
gain.gain.linearRampToValueAtTime(0, t + 0.05);

Pass:

ts
gain.gain.exponentialRampToValueAtTime(0.001, t + 0.05);

Physics Rules

physics-active-state

Interactive elements must have active/pressed state with scale transform.

Fail:

css
.button:hover { background: var(--gray-3); }/* Missing :active state */

Pass:

css
.button:active { transform: scale(0.98); }
physics-subtle-deformation

Squash/stretch deformation must be subtle (0.95-1.05 range).

Fail:

tsx
<motion.div whileTap={{ scale: 0.8 }} />

Pass:

tsx
<motion.div whileTap={{ scale: 0.98 }} />
physics-spring-for-overshoot

Use springs (not easing) when overshoot-and-settle is needed.

Fail:

tsx
<motion.div transition={{ duration: 0.3, ease: "easeOut" }} />// When element should bounce/settle

Pass:

tsx
<motion.div transition={{ type: "spring", stiffness: 500, damping: 30 }} />
physics-no-excessive-stagger

Stagger delays must not exceed 50ms per item.

Fail:

tsx
transition={{ staggerChildren: 0.15 }}

Pass:

tsx
transition={{ staggerChildren: 0.03 }}

Staging Rules

staging-one-focal-point

Only one element should animate prominently at a time.

Fail:

tsx
// Multiple elements with competing entrance animations<motion.div animate={{ scale: 1.1 }} /><motion.div animate={{ scale: 1.1 }} />
staging-dim-background

Modal/dialog backgrounds should dim to direct focus.

Fail:

css
.overlay { background: transparent; }

Pass:

css
.overlay { background: var(--black-a6); }
staging-z-index-hierarchy

Animated elements must respect z-index layering.

Fail:

css
.tooltip { /* No z-index, may render behind other elements */ }

Pass:

css
.tooltip { z-index: 50; }

Output Format

When reviewing files, output findings as:

file:line - [rule-id] description of issue
Example:components/modal/index.tsx:45 - [timing-under-300ms] Exit animation 400ms exceeds 300ms limitcomponents/button/styles.module.css:12 - [physics-active-state] Missing :active transform

Summary Table

After findings, output a summary:

RuleCountSeverity
timing-under-300ms2HIGH
physics-active-state3MEDIUM
easing-entrance-ease-out1MEDIUM

References

來源與署名

來源:raphaelsalaja/skill位於skills/12-principles-of-animation提交dc9eef2

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架