Skip to content

Commit fa9ab41

Browse files
committed
feat(shape): Add dictionary of all easing functions
1 parent 3e5aedd commit fa9ab41

1 file changed

Lines changed: 158 additions & 0 deletions

File tree

src/easing.js

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
/**
2+
* Dictionary of all available easing.
3+
*/
4+
export const EASING = {
5+
inQuad: (t, b, c, d) => c * (t /= d) * t + b,
6+
7+
outQuad: (t, b, c, d) => -c * (t /= d) * (t - 2) + b,
8+
9+
inOutQuad: (t, b, c, d) => {
10+
if ((t /= d / 2) < 1) return c / 2 * t * t + b;
11+
return -c / 2 * ((--t) * (t - 2) - 1) + b;
12+
},
13+
14+
inCubic: (t, b, c, d) => c * (t /= d) * t * t + b,
15+
16+
outCubic: (t, b, c, d) => c * ((t = t / d - 1) * t * t + 1) + b,
17+
18+
inOutCubic: (t, b, c, d) => {
19+
if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;
20+
return c / 2 * ((t -= 2) * t * t + 2) + b;
21+
},
22+
23+
inQuart: (t, b, c, d) => c * (t /= d) * t * t * t + b,
24+
25+
outQuart: (t, b, c, d) => -c * ((t = t / d - 1) * t * t * t - 1) + b,
26+
27+
inOutQuart: (t, b, c, d) => {
28+
if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;
29+
return -c / 2 * ((t -= 2) * t * t * t - 2) + b;
30+
},
31+
32+
inQuint: (t, b, c, d) => c * (t /= d) * t * t * t * t + b,
33+
34+
outQuint: (t, b, c, d) => c * ((t = t / d - 1) * t * t * t * t + 1) + b,
35+
36+
inOutQuint: (t, b, c, d) => {
37+
if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;
38+
return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
39+
},
40+
41+
inSine: (t, b, c, d) => -c * Math.cos(t / d * (Math.PI / 2)) + c + b,
42+
43+
outSine: (t, b, c, d) => c * Math.sin(t / d * (Math.PI / 2)) + b,
44+
45+
inOutSine: (t, b, c, d) => -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b,
46+
47+
inExpo: (t, b, c, d) => (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b,
48+
49+
outExpo: (t, b, c, d) => (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b,
50+
51+
inOutExpo: (t, b, c, d) => {
52+
if (t == 0) return b;
53+
if (t == d) return b + c;
54+
if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;
55+
return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;
56+
},
57+
58+
inCirc: (t, b, c, d) => -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b,
59+
60+
outCirc: (t, b, c, d) => c * Math.sqrt(1 - (t = t / d - 1) * t) + b,
61+
62+
inOutCirc: (t, b, c, d) => {
63+
if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;
64+
return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
65+
},
66+
67+
inElastic: (t, b, c, d) => {
68+
let s = 1.70158;
69+
let p = 0;
70+
let a = c;
71+
72+
if (t == 0) return b;
73+
if ((t /= d) == 1) return b + c;
74+
if (!p) p = d * .3;
75+
if (a < Math.abs(c)) {
76+
a = c;
77+
s = p / 4;
78+
} else {
79+
s = p / (2 * Math.PI) * Math.asin(c / a)
80+
}
81+
82+
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
83+
},
84+
85+
outElastic: (t, b, c, d) => {
86+
let s = 1.70158;
87+
let p = 0;
88+
let a = c;
89+
90+
if (t == 0) return b;
91+
if ((t /= d) == 1) return b + c;
92+
if (!p) p = d * .3;
93+
94+
if (a < Math.abs(c)) {
95+
a = c;
96+
s = p / 4;
97+
} else {
98+
s = p / (2 * Math.PI) * Math.asin(c / a)
99+
}
100+
101+
return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;
102+
},
103+
104+
inOutElastic: (t, b, c, d) => {
105+
let s = 1.70158;
106+
let p = 0;
107+
let a = c;
108+
109+
if (t == 0) return b;
110+
if ((t /= d / 2) == 2) return b + c;
111+
if (!p) p = d * (.3 * 1.5);
112+
if (a < Math.abs(c)) {
113+
a = c;
114+
s = p / 4;
115+
} else {
116+
s = p / (2 * Math.PI) * Math.asin(c / a)
117+
}
118+
119+
if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;
120+
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;
121+
},
122+
123+
inBack: (t, b, c, d) => {
124+
let s = 1.70158;
125+
return c * (t /= d) * t * ((s + 1) * t - s) + b;
126+
},
127+
128+
outBack: (t, b, c, d) => {
129+
let s = 1.70158;
130+
return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
131+
},
132+
133+
inOutBack: (t, b, c, d) => {
134+
let s = 1.70158;
135+
136+
if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;
137+
return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
138+
},
139+
140+
inBounce: (t, b, c, d) => c - this.OutBounce(x, d - t, 0, c, d) + b,
141+
142+
outBounce: (t, b, c, d) => {
143+
if ((t /= d) < (1 / 2.75)) {
144+
return c * (7.5625 * t * t) + b;
145+
} else if (t < (2 / 2.75)) {
146+
return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
147+
} else if (t < (2.5 / 2.75)) {
148+
return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
149+
} else {
150+
return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
151+
}
152+
},
153+
154+
inOutBounce: (t, b, c, d) => {
155+
if (t < d / 2) return this.inBounce(x, t * 2, 0, c, d) * .5 + b;
156+
return this.outBounce(x, t * 2 - d, 0, c, d) * .5 + c * .5 + b;
157+
}
158+
};

0 commit comments

Comments
 (0)