Skip to main content

Easing

The Easing module implements common easing functions. You can use it with the interpolate() API.

You can find a visualization of some common easing functions at http://easings.net/

Predefined animations​

The Easing module provides several predefined animations through the following methods:

  • back provides a basic animation where the object goes slightly back before moving forward
  • bounce provides a bouncing animation
  • ease provides a basic inertial animation
  • elastic provides a basic spring interaction

Standard functions​

Three standard easing functions are provided:

The poly function can be used to implement quartic, quintic, and other higher power functions.

Additional functions​

Additional mathematical functions are provided by the following methods:

  • bezier provides a cubic bezier curve
  • circle provides a circular function
  • sin provides a sinusoidal function
  • exp provides an exponential function

The following helpers are used to modify other easing functions.

  • in runs an easing function forwards
  • inOut makes any easing function symmetrical
  • out runs an easing function backwards

Example​

tsx
import { Easing, interpolate } from "remotion";
 
const MyVideo: React.FC = () => {
const frame = useCurrentFrame();
const interpolated = interpolate(frame, [0, 100], [0, 1], {
easing: Easing.bezier(0.8, 0.22, 0.96, 0.65),
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
});
return (
<AbsoluteFill
style={{
transform: `scale(${interpolated})`,
backgroundColor: "red",
}}
/>
);
};
tsx
import { Easing, interpolate } from "remotion";
 
const MyVideo: React.FC = () => {
const frame = useCurrentFrame();
const interpolated = interpolate(frame, [0, 100], [0, 1], {
easing: Easing.bezier(0.8, 0.22, 0.96, 0.65),
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
});
return (
<AbsoluteFill
style={{
transform: `scale(${interpolated})`,
backgroundColor: "red",
}}
/>
);
};

Reference

Methods​

step0​

jsx
static step0(n): number
jsx
static step0(n): number

A stepping function, returns 1 for any positive value of n.


step1​

jsx
static step1(n): number
jsx
static step1(n): number

A stepping function, returns 1 if n is greater than or equal to 1.


linear​

jsx
static linear(t): number
jsx
static linear(t): number

A linear function, f(t) = t. Position correlates to elapsed time one to one.

http://cubic-bezier.com/#0,0,1,1


ease​

jsx
static ease(t): number
jsx
static ease(t): number

A basic inertial interaction, similar to an object slowly accelerating to speed.

http://cubic-bezier.com/#.42,0,1,1


quad​

jsx
static quad(t): number
jsx
static quad(t): number

A quadratic function, f(t) = t * t. Position equals the square of elapsed time.

http://easings.net/#easeInQuad


cubic​

jsx
static cubic(t): number
jsx
static cubic(t): number

A cubic function, f(t) = t * t * t. Position equals the cube of elapsed time.

http://easings.net/#easeInCubic


poly()​

jsx
static poly(n): (t) => number
jsx
static poly(n): (t) => number

A power function. Position is equal to the Nth power of elapsed time.

n = 4: http://easings.net/#easeInQuart n = 5: http://easings.net/#easeInQuint


sin​

jsx
static sin(t): number
jsx
static sin(t): number

A sinusoidal function.

http://easings.net/#easeInSine


circle​

jsx
static circle(t): number
jsx
static circle(t): number

A circular function.

http://easings.net/#easeInCirc


exp​

jsx
static exp(t): number
jsx
static exp(t): number

An exponential function.

http://easings.net/#easeInExpo


elastic()​

jsx
static elastic(bounciness): (t) => number
jsx
static elastic(bounciness): (t) => number

A basic elastic interaction, similar to a spring oscillating back and forth.

Default bounciness is 1, which overshoots a little bit once. 0 bounciness doesn't overshoot at all, and bounciness of N > 1 will overshoot about N times.

http://easings.net/#easeInElastic


back()​

jsx
static back(s): (t) => number
jsx
static back(s): (t) => number

Use with Animated.parallel() to create a basic effect where the object animates back slightly as the animation starts.


bounce​

jsx
static bounce(t): number
jsx
static bounce(t): number

Provides a basic bouncing effect.

http://easings.net/#easeInBounce

See an example of how you might use it below

jsx
interpolate(0.5, [0, 1], [0, 1], {
easing: Easing.bounce,
});
jsx
interpolate(0.5, [0, 1], [0, 1], {
easing: Easing.bounce,
});

bezier()​

jsx
static bezier(x1, y1, x2, y2) => (t): number
jsx
static bezier(x1, y1, x2, y2) => (t): number

Provides a cubic bezier curve, equivalent to CSS Transitions' transition-timing-function.

A useful tool to visualize cubic bezier curves can be found at http://cubic-bezier.com/

jsx
interpolate(0.5, [0, 1], [0, 1], {
easing: Easing.bezier(0.5, 0.01, 0.5, 1),
});
jsx
interpolate(0.5, [0, 1], [0, 1], {
easing: Easing.bezier(0.5, 0.01, 0.5, 1),
});

in(easing)​

jsx
static in(easing: (t: number) => number): (t: number) => number;
jsx
static in(easing: (t: number) => number): (t: number) => number;

Runs an easing function forwards.

jsx
{
easing: Easing.in(Easing.ease);
}
jsx
{
easing: Easing.in(Easing.ease);
}

out()​

jsx
static out(easing: (t: number) => number): (t: number) => number;
jsx
static out(easing: (t: number) => number): (t: number) => number;

Runs an easing function backwards.

jsx
{
easing: Easing.out(Easing.ease);
}
jsx
{
easing: Easing.out(Easing.ease);
}

inOut()​

jsx
static inOut(easing: (t: number) => number): (t: number) => number;
jsx
static inOut(easing: (t: number) => number): (t: number) => number;
jsx
{
easing: Easing.inOut(Easing.ease);
}
jsx
{
easing: Easing.inOut(Easing.ease);
}

Makes any easing function symmetrical. The easing function will run forwards for half of the duration, then backwards for the rest of the duration.

Credits​

The Easing API is the exact same as the one from React Native and the documentation has been copied over. Credit goes to them for this excellent API.

See also​