ts-useful
Version:
Functions for animation, color transitions, ecliptic, bezier, decasteljau, curves, three dimensional curves, smooth scrolling, random range, randomItem, mobius index, vectors, physics vectors, and easing.
52 lines • 2.88 kB
JavaScript
import { Bezier } from './bezier';
import { RandomItem } from './randomItem';
export class Easing {
}
Easing.linear = Bezier([0.0, 0.0, 1.0, 1.0]);
Easing.sineIn = Bezier([0.47, 0, 0.745, 0.715]);
Easing.sineOut = Bezier([0.39, 0.575, 0.565, 1]);
Easing.sineInOut = Bezier([0.445, 0.05, 0.55, 0.95]);
Easing.quadIn = Bezier([0.55, 0.085, 0.68, 0.53]);
Easing.quadOut = Bezier([0.25, 0.46, 0.45, 0.94]);
Easing.quadInOut = Bezier([0.455, 0.03, 0.515, 0.955]);
Easing.cubicIn = Bezier([0.55, 0.055, 0.675, 0.19]);
Easing.cubicOut = Bezier([0.215, 0.61, 0.355, 1]);
Easing.cubicInOut = Bezier([0.645, 0.045, 0.355, 1]);
Easing.quartIn = Bezier([0.895, 0.03, 0.685, 0.22]);
Easing.quartOut = Bezier([0.165, 0.84, 0.44, 1]);
Easing.quartInOut = Bezier([0.77, 0, 0.175, 1]);
Easing.quintIn = Bezier([0.755, 0.05, 0.855, 0.06]);
Easing.quintOut = Bezier([0.23, 1, 0.32, 1]);
Easing.quintInOut = Bezier([0.86, 0, 0.07, 1]);
Easing.expoIn = Bezier([0.95, 0.05, 0.795, 0.035]);
Easing.expoOut = Bezier([0.19, 1, 0.22, 1]);
Easing.expoInOut = Bezier([1, 0, 0, 1]);
Easing.circIn = Bezier([0.6, 0.04, 0.98, 0.335]);
Easing.circOut = Bezier([0.075, 0.82, 0.165, 1]);
Easing.circInOut = Bezier([0.785, 0.135, 0.15, 0.86]);
Easing.backIn = Bezier([0.6, -0.28, 0.735, 0.045]);
Easing.backOut = Bezier([0.175, 0.885, 0.32, 1.275]);
Easing.backInOut = Bezier([0.68, -0.55, 0.265, 1.55]);
Easing.boomerang = (t) => ((t >= .5) ? 1 - t : t) * 2;
Easing.elasticIn = (t) => (.04 - .04 / t) * Math.sin(25 * t) + 1;
Easing.elasticOut = (t) => .04 * t / (--t) * Math.sin(25 * t);
Easing.elasticInOut = (t) => (t -= .5) < 0 ? (.02 + .01 / t) * Math.sin(50 * t) : (0.02 - .01 / t) * Math.sin(50 * t) + 1;
// Refactored from https://easings.net/#easeOutBounce
Easing.bounceOut = (t) => {
const [n1, d1] = [7.5625, 2.75];
return (t < 1 / d1) ? n1 * t * t
: (t < 2 / d1) ? n1 * (t -= 1.5 / d1) * t + 0.75
: (t < 2.5 / d1) ? n1 * (t -= 2.25 / d1) * t + 0.9375
: n1 * (t -= 2.625 / d1) * t + 0.984375;
};
Easing.bounceIn = (t) => 1 - Easing.bounceOut(1 - t);
Easing.bounceInOut = (t) => t < 0.5 ? (1 - Easing.bounceOut(1 - 2 * t)) / 2 : (1 + Easing.bounceOut(2 * t - 1)) / 2;
Easing.random = () => RandomItem([
Easing.backIn, Easing.backInOut, Easing.backOut, Easing.bounceIn, Easing.bounceInOut, Easing.bounceOut,
Easing.circIn, Easing.circInOut, Easing.circOut, Easing.cubicIn, Easing.cubicInOut, Easing.cubicOut,
Easing.elasticIn, Easing.elasticInOut, Easing.elasticOut, Easing.expoIn, Easing.expoInOut, Easing.expoOut,
Easing.linear, Easing.boomerang,
Easing.quadIn, Easing.quadInOut, Easing.quadOut, Easing.quartIn, Easing.quartInOut, Easing.quartOut,
Easing.quintIn, Easing.quintInOut, Easing.quintOut, Easing.sineIn, Easing.sineInOut, Easing.sineOut,
]);
//# sourceMappingURL=easing.js.map