Easing
Easing functions make tweened motion look more natural by emulating the changes in velocity experienced by objects in the real world.
They work by accepting a progress value from 0
to 1
, and returning a new one.
Popmotion comes with a number of preset easing functions, and provides methods to create new easing functions.
Import
import { easing } from 'popmotion';
To use Popmotion’s easing functions with a different animation library, they’re available from the @popmotion/easing
package:
npm install @popmotion/easing
import { linear } from '@popmotion/easing';
Example
import { tween, easing } from 'popmotion';
tween({
ease: easing.easeOut
}).start();
Presets
Popmotion comes with the following preset easing functions:
cubicBezier
linear
easeIn
,easeOut
,easeInOut
circIn
,circOut
,circInOut
backIn
,backOut
,backInOut
anticipate
Try them out by editing this live example:
Live editor
const ball = document.querySelector('#b .ball'); const ballStyler = styler(ball); tween({ to: 300, duration: 300, ease: easing.linear }).start(ballStyler.set('x'));
Easing creation
Popmotion provides the following functions to create your own easing functions:
cubicBezier
Creates cubic bezier curve easing function.
const { cubicBezier } = easing;
const longTail = cubicBezier(0, .42, 0, 1);
reversed
Accepts an easing function and returns a new one that reverses the provided one.
For instance, an easeIn
would become an easeOut
.
const { anticipate, reversed } = easing;
const anticipateOut = reversed(anticipate);
mirrored
Accepts an easing function and returns a new one that mirrors the provided one.
For instance, an easeIn
would become an easeInOut
.
const { anticipate, mirrored } = easing;
const anticipateInOut = mirrored(anticipate);
createExpoIn
Creates an easing function based on the exponent function progress ** exponent
. easeIn
is createExpoIn(2)
.
const { createExpoIn } = easing;
const strongerEaseIn = createExpoIn(3);
createBackIn
Creates an easing function with an overshoot. backIn
is createBackIn(1.525)
.
const { createBackIn, reversed } = easing;
const strongerBackOut = reversed(createBackIn(3));
createAnticipateEasing
Creates an easing function with a small anticipate and ease out. anticipate
is createAnticipateEasing(1.525)
.
const { createAnticipateEasing } = easing;
const strongerAnticipate = createAnticipateEasing(3);