Skip to content

Commit 550c575

Browse files
committed
Animation: Modernizing the source + built-in easing
1 parent 6aa296f commit 550c575

File tree

9 files changed

+799
-716
lines changed

9 files changed

+799
-716
lines changed

lib/animation.js

+388-409
Large diffs are not rendered by default.

lib/easing.js

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
const SI = 1.70158;
2+
const SIO = 1.70158 * 1.525;
3+
const SB = 7.5625;
4+
const HALF = 0.5;
5+
const {
6+
PI,
7+
cos,
8+
sin,
9+
sqrt,
10+
} = Math;
11+
12+
const ease = {};
13+
ease.linear = n => n;
14+
ease.inQuad = n => n ** 2;
15+
ease.outQuad = n => n * (2 - n);
16+
ease.inOutQuad = n => {
17+
n *= 2;
18+
return n < 1 ?
19+
HALF * n * n :
20+
-HALF * (--n * (n - 2) - 1);
21+
};
22+
ease.inCube = n => n ** 3;
23+
ease.outCube = n => --n * n * n + 1;
24+
ease.inOutCube = n => {
25+
n *= 2;
26+
return n < 1 ?
27+
HALF * n ** 3 :
28+
HALF * ((n -= 2) * n * n + 2);
29+
};
30+
31+
ease.inQuart = n => n ** 4;
32+
ease.outQuart = n => 1 - (--n * n ** 3);
33+
ease.inOutQuart = n => {
34+
n *= 2;
35+
return n < 1 ?
36+
HALF * n ** 4 :
37+
-HALF * ((n -= 2) * n ** 3 - 2);
38+
};
39+
40+
ease.inQuint = n => n ** 5;
41+
ease.outQuint = n => --n * n ** 4 + 1;
42+
ease.inOutQuint = n => {
43+
n *= 2;
44+
return n < 1 ?
45+
HALF * n ** 5 :
46+
HALF * ((n -= 2) * n ** 4 + 2);
47+
};
48+
49+
ease.inSine = n => 1 - cos(n * PI / 2);
50+
ease.outSine = n => sin(n * PI / 2);
51+
ease.inOutSine = n => HALF * (1 - cos(PI * n));
52+
53+
ease.inExpo = n => 0 === n ? 0 : 1024 ** (n - 1);
54+
ease.outExpo = n => 1 === n ? n : 1 - 2 ** (-10 * n);
55+
ease.inOutExpo = n => {
56+
if (n === 0) { return 0; }
57+
if (n === 1) { return 1; }
58+
return (n *= 2) < 1 ?
59+
HALF * (1024 ** (n - 1)) :
60+
HALF * (-(2 ** (-10 * (n - 1))) + 2);
61+
};
62+
63+
ease.inCirc = n => 1 - sqrt(1 - n * n);
64+
ease.outCirc = n => sqrt(1 - (--n * n));
65+
ease.inOutCirc = n => {
66+
n *= 2;
67+
return (n < 1) ?
68+
-HALF * (sqrt(1 - n * n) - 1) :
69+
HALF * (sqrt(1 - (n -= 2) * n) + 1);
70+
};
71+
72+
ease.inBack = n => n * n * ((SI + 1) * n - SI);
73+
ease.outBack = n => --n * n * ((SI + 1) * n + SI) + 1;
74+
ease.inOutBack = n => {
75+
return (n *= 2) < 1 ?
76+
HALF * (n * n * ((SIO + 1) * n - SIO)) :
77+
HALF * ((n -= 2) * n * ((SIO + 1) * n + SIO) + 2);
78+
};
79+
80+
ease.outBounce = n => {
81+
if (n < (1 / 2.75)) {
82+
return SB * n * n;
83+
} else if (n < (2 / 2.75)) {
84+
return SB * (n -= (1.5 / 2.75)) * n + 0.75;
85+
} else if (n < (2.5 / 2.75)) {
86+
return SB * (n -= (2.25 / 2.75)) * n + 0.9375;
87+
} else {
88+
return SB * (n -= (2.625 / 2.75)) * n + 0.984375;
89+
}
90+
};
91+
92+
ease.inBounce = n => 1 - ease.outBounce(1 - n);
93+
ease.inOutBounce = n => {
94+
return n < HALF ?
95+
ease.inBounce(n * 2) * HALF :
96+
ease.outBounce(n * 2 - 1) * HALF + HALF;
97+
};
98+
99+
const exportables = {};
100+
101+
Object.keys(ease).forEach(key => {
102+
exportables[key.toLowerCase()] = ease[key];
103+
});
104+
105+
module.exports = new Proxy({}, {
106+
get(target, property) {
107+
return exportables[property.replace(/([a-z])([A-Z])/g, "$1$2").toLowerCase()];
108+
}
109+
});

package-lock.json

-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@
152152
"dependencies": {
153153
"chalk": "2.1.0",
154154
"color-convert": "~1.2.2",
155-
"ease-component": "latest",
156155
"lodash.clonedeep": "^4.3.0",
157156
"lodash.debounce": "^4.0.3",
158157
"nanotimer": "0.3.10",

0 commit comments

Comments
 (0)