Skip to content

Commit 1edcc24

Browse files
committed
add elastic timing function variants
1 parent 07972e7 commit 1edcc24

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

internal/animate/timing.ts

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,45 @@ export interface TimingFunc {
22
(percentage: number): number;
33
}
44

5-
const linear: TimingFunc = (percentage: number) => {
6-
return percentage;
5+
const linear: TimingFunc = (p) => {
6+
return p;
77
};
88

9-
const easeIn: TimingFunc = (percentage: number) => {
10-
return 1 - (percentage - 1) ** 2;
9+
const easeIn: TimingFunc = (p) => {
10+
return 1 - (p - 1) ** 2;
1111
};
1212

13-
const easeOut: TimingFunc = (percentage: number) => {
14-
return 1 - easeIn(1 - percentage);
13+
const easeOut: TimingFunc = (p) => {
14+
return 1 - easeIn(1 - p);
1515
};
1616

17-
const easeInOut: TimingFunc = (percentage: number) => {
18-
return 0.5 + 0.5 * Math.sin(Math.PI * (percentage + 1.5));
17+
const easeInOut: TimingFunc = (p) => {
18+
return 0.5 + 0.5 * Math.sin(Math.PI * (p + 1.5));
1919
};
2020

21-
const elastic = (): TimingFunc => (percentage: number) => {
22-
const p = 0.1;
23-
return Math.pow(2, -10 * percentage) * Math.sin(((percentage - p / 4) * (2 * Math.PI)) / p) + 1;
21+
const elasticIn = (s: number): TimingFunc => (p) => {
22+
return Math.pow(2, -10 * p) * Math.sin(((p - s / 4) * (2 * Math.PI)) / s) + 1;
2423
};
2524

25+
const elasticOut = (s: number): TimingFunc => (p) => {
26+
return 1 - elasticIn(s)(1 - p);
27+
};
28+
29+
// https://www.desmos.com/calculator/fqisoq1kuw
2630
export const timingFunctions = {
2731
linear,
2832
easeIn,
2933
easeOut,
3034
easeInOut,
31-
elastic,
35+
elasticIn0: elasticIn(1),
36+
elasticIn1: elasticIn(0.16),
37+
elasticIn2: elasticIn(0.09),
38+
elasticIn3: elasticIn(0.05),
39+
elasticOut0: elasticOut(1),
40+
elasticOut1: elasticOut(0.16),
41+
elasticOut2: elasticOut(0.09),
42+
elasticOut3: elasticOut(0.05),
3243
};
44+
45+
// Type assertion.
46+
const _: Record<string, TimingFunc> = timingFunctions;

0 commit comments

Comments
 (0)