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 从公开仓库中收录这些内容。

举报或申请下架