Easing Functions: The Secret to Smooth Animation

The secret ingredient that makes animations feel alive

1

What is Easing?

Compare two balls moving the same distance. One uses linear movement, the other uses easing. Which feels more natural?

Linear Motion

Same speed the whole way. Looks robotic and unnatural. Rarely seen in real life.

Eased Motion

Accelerates and decelerates smoothly. Feels organic because that's how real objects move!

Fun Fact
Disney's 12 Principles of Animation include "Slow In and Slow Out" - which is exactly what easing does!
2

Linear Interpolation (Lerp)

Before we ease, we need to understand lerp - the foundation of all animation. It blends between two values based on a progress value (t) from 0 to 1.

lerp(start, end, t) = start + (end - start) × t
When t=0, you get start. When t=1, you get end. In between? A smooth blend!

t = 0

At the very beginning - returns the start value

t = 0.5

Halfway through - returns the middle value

t = 1

At the end - returns the end value

3

Ease In: Slow Start, Fast Finish

Ease In starts slowly and accelerates. Perfect for objects being thrown or dropped - they pick up speed as they go!

easeIn(t) = tn
The higher the power (n), the slower the start and faster the end. Quadratic (n=2) is most common.
Game Example
Ease In is great for charging attacks - the longer you hold, the more it accelerates!
4

Ease Out: Fast Start, Slow Finish

Ease Out starts fast and decelerates. Perfect for UI elements sliding into place or a ball coming to rest.

easeOut(t) = 1 - (1 - t)n
We flip the ease in formula! Fast acceleration at start, gentle deceleration at end.

Menu Animations

Menus slide in quickly then settle smoothly - that's Ease Out!

Notifications

Toast messages that pop in and ease to their final position use Ease Out.

5

Ease In-Out: The Best of Both

Ease In-Out combines both - slow start, fast middle, slow end. The most natural-looking motion for many animations.

easeInOut(t) = t < 0.5 ? 2n-1 × tn : 1 - (-2t + 2)n / 2
Uses Ease In for first half, Ease Out for second half - smooth acceleration and deceleration!
Pro Tip
Ease In-Out Cubic is the default for CSS transitions and most animation libraries. When in doubt, use this!
6

The Easing Zoo

Beyond basic easings, there are many specialized functions. Click any to see it in action!

Bounce

Like a ball bouncing to rest. Great for playful UI and game juice!

Elastic

Overshoots then oscillates like a spring. Adds energy and life!

Back

Pulls back before going forward (or overshoots). Creates anticipation!

7

The Easing Race

Watch different easings race! They all take the same time but look completely different.

Key Insight
All balls travel the same distance in the same time - but the FEELING is completely different!
8

Custom Easings with Bezier Curves

Drag the control points to create your own custom easing! Bezier curves let you design exactly the motion you want.

transition: all 0.5s cubic-bezier(0.25, 0.1, 0.25, 1.0);

CSS Bezier

CSS uses cubic-bezier(x1, y1, x2, y2) for custom easing in transitions!

Four Numbers

The two control points define the curve shape. X is time, Y is progress.

9

Easing Playground

Design your own animation! Choose an easing, property, and watch your creation come to life.

0%
Progress (t)
0%
Eased Value
0.00
Current Speed

Easing Master!

You've learned the secret that separates amateur animations from professional ones. Easing makes everything feel alive!

0
Animations Played
0
Easings Explored
0
Time Exploring

Lerp is the Foundation

Linear interpolation blends between values - easing just curves the progress!

Ease In = Slow Start

Objects accelerate like they're building momentum.

Ease Out = Slow End

Objects decelerate like they're coming to rest.

Ease In-Out = Both

The most natural motion - accelerate then decelerate.

Special Easings Add Personality

Bounce, Elastic, and Back add life and game feel!

Bezier = Total Control

Design custom curves for exactly the motion you need.

Ready to Create?

Put your new knowledge into practice!

More Discoveries

Suggest a Correction