animare
Version:
Advanced animation library for modern JavaScript.
34 lines (29 loc) • 997 B
text/typescript
import { bounce, wobble } from './ease.js';
import type { Ease_in_out_inOut, EaseFn } from './types.js';
const easeOut: Ease_in_out_inOut = {
back: (c1 = 1.70158) => {
return t => {
const c3 = c1 + 1;
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
};
},
bounce,
circ: t => Math.sqrt(1 - Math.pow(t - 1, 2)),
cubic: t => 1 - Math.pow(1 - t, 3),
elastic: t => {
const c4 = (2 * Math.PI) / 3;
return t === 0 ? 0 : t === 1 ? 1 : Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;
},
expo: t => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),
sine: t => Math.sin((t * Math.PI) / 2),
quad: t => 1 - (1 - t) * (1 - t),
quart: t => 1 - Math.pow(1 - t, 4),
quint: t => 1 - Math.pow(1 - t, 5),
poly: n => t => 1 - Math.pow(1 - t, n),
wobble: (bounciness = 1) => out(wobble(bounciness)),
};
/** Runs an easing function backwards. */
function out(easing: EaseFn): EaseFn {
return t => 1 - easing(1 - t);
}
export default easeOut;