home / skills / dylantarre / animation-principles / anime-js
This skill helps you implement Disney's 12 animation principles using Anime.js to craft expressive motion across UI elements.
npx playbooks add skill dylantarre/animation-principles --skill anime-jsReview the files below or copy the command above to add this skill to your agents.
---
name: anime-js
description: Use when implementing Disney's 12 animation principles with Anime.js library
---
# Anime.js Animation Principles
Implement all 12 Disney animation principles using Anime.js's flexible animation engine.
## 1. Squash and Stretch
```javascript
anime({
targets: '.ball',
scaleX: [1, 1.2, 1],
scaleY: [1, 0.8, 1],
duration: 300,
easing: 'easeInOutQuad'
});
```
## 2. Anticipation
```javascript
anime.timeline()
.add({
targets: '.character',
translateY: 10,
scaleY: 0.9,
duration: 200
})
.add({
targets: '.character',
translateY: -200,
duration: 400,
easing: 'easeOutQuad'
});
```
## 3. Staging
```javascript
anime({
targets: '.background',
filter: 'blur(3px)',
opacity: 0.6,
duration: 500
});
anime({
targets: '.hero',
scale: 1.1,
duration: 500
});
```
## 4. Straight Ahead / Pose to Pose
```javascript
anime({
targets: '.element',
keyframes: [
{ translateX: 0, translateY: 0 },
{ translateX: 100, translateY: -50 },
{ translateX: 200, translateY: 0 },
{ translateX: 300, translateY: -30 }
],
duration: 1000
});
```
## 5. Follow Through and Overlapping Action
```javascript
anime.timeline()
.add({ targets: '.body', translateX: 200, duration: 500 })
.add({ targets: '.hair', translateX: 200, duration: 500 }, '-=450')
.add({ targets: '.cape', translateX: 200, duration: 600 }, '-=500');
```
## 6. Slow In and Slow Out
```javascript
anime({
targets: '.element',
translateX: 300,
duration: 600,
easing: 'easeInOutCubic'
});
// Options: easeInQuad, easeOutQuad, easeInOutQuad
// easeInCubic, easeOutCubic, easeInOutCubic
// spring(mass, stiffness, damping, velocity)
```
## 7. Arc
```javascript
anime({
targets: '.ball',
translateX: 200,
translateY: [
{ value: -100, duration: 500 },
{ value: 0, duration: 500 }
],
easing: 'easeOutQuad',
duration: 1000
});
// Or use SVG path
anime({
targets: '.element',
translateX: anime.path('.motion-path')('x'),
translateY: anime.path('.motion-path')('y'),
duration: 1000
});
```
## 8. Secondary Action
```javascript
const tl = anime.timeline();
tl.add({
targets: '.button',
scale: 1.1,
duration: 200
})
.add({
targets: '.icon',
rotate: 15,
duration: 150
}, '-=150')
.add({
targets: '.particles',
opacity: [0, 1],
delay: anime.stagger(50)
}, '-=100');
```
## 9. Timing
```javascript
// Fast - snappy
anime({ targets: '.fast', translateX: 100, duration: 150 });
// Normal
anime({ targets: '.normal', translateX: 100, duration: 300 });
// Slow - dramatic
anime({ targets: '.slow', translateX: 100, duration: 600 });
// Spring physics
anime({ targets: '.spring', translateX: 100, easing: 'spring(1, 80, 10, 0)' });
```
## 10. Exaggeration
```javascript
anime({
targets: '.element',
scale: 1.5,
rotate: '2turn',
duration: 800,
easing: 'easeOutElastic(1, 0.5)' // overshoot
});
```
## 11. Solid Drawing
```javascript
anime({
targets: '.box',
rotateX: 45,
rotateY: 30,
perspective: 1000,
duration: 500
});
```
## 12. Appeal
```javascript
anime({
targets: '.card',
scale: 1.02,
boxShadow: '0 20px 40px rgba(0,0,0,0.2)',
duration: 300,
easing: 'easeOutQuad'
});
```
## Stagger Animation
```javascript
anime({
targets: '.item',
translateY: [20, 0],
opacity: [0, 1],
delay: anime.stagger(100), // 100ms between each
easing: 'easeOutQuad'
});
```
## Key Anime.js Features
- `anime.timeline()` - Sequence animations
- `keyframes` - Multiple poses
- `anime.stagger()` - Offset delays
- `anime.path()` - SVG motion paths
- Built-in easings + `spring()` + `elastic()`
- `'-=200'` - Relative offset timing
- `anime.set()` - Instant property set
This skill shows how to implement Disney's 12 animation principles using the Anime.js library. It provides ready-to-use patterns and code snippets that map each principle to Anime.js features. Use it to make UI and character motion feel more lifelike, clear, and engaging.
Each principle is translated into concrete Anime.js setups: scale and squash for squash-and-stretch, timelines and offsets for anticipation and overlapping action, keyframes for straight-ahead or pose-to-pose workflows, and path-based motion for arcs. The skill highlights easings, timelines, keyframes, staggered delays, and spring/elastic options so you can compose expressive, physically convincing animations quickly. It also shows small UI tweaks (shadows, perspective) to boost appeal and staging.
Can I combine multiple principles in one timeline?
Yes. Use anime.timeline() to sequence anticipation, primary action, and secondary actions with relative offsets so each part overlaps naturally.
How do I keep animations accessible and non-jarring?
Keep durations moderate, avoid excessive scale/rotation, respect reduced-motion preferences by disabling or simplifying animations, and use opacity/translate instead of abrupt layout changes.