mirror of
https://github.com/chartjs/Chart.js.git
synced 2025-12-08 20:36:08 +00:00
Clean up easing functions (#8518)
* Clean up easing functions * Remove leftover comment
This commit is contained in:
parent
7c75310a0c
commit
53ea370f5c
@ -1,194 +1,84 @@
|
||||
import {PI, TAU, HALF_PI} from './helpers.math';
|
||||
|
||||
const atEdge = (t) => t === 0 || t === 1;
|
||||
const elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
|
||||
const elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
|
||||
|
||||
/**
|
||||
* Easing functions adapted from Robert Penner's easing equations.
|
||||
* @namespace Chart.helpers.easing.effects
|
||||
* @see http://www.robertpenner.com/easing/
|
||||
*/
|
||||
const effects = {
|
||||
linear(t) {
|
||||
return t;
|
||||
},
|
||||
linear: t => t,
|
||||
|
||||
easeInQuad(t) {
|
||||
return t * t;
|
||||
},
|
||||
easeInQuad: t => t * t,
|
||||
|
||||
easeOutQuad(t) {
|
||||
return -t * (t - 2);
|
||||
},
|
||||
easeOutQuad: t => -t * (t - 2),
|
||||
|
||||
easeInOutQuad(t) {
|
||||
if ((t /= 0.5) < 1) {
|
||||
return 0.5 * t * t;
|
||||
}
|
||||
return -0.5 * ((--t) * (t - 2) - 1);
|
||||
},
|
||||
easeInOutQuad: t => ((t /= 0.5) < 1)
|
||||
? 0.5 * t * t
|
||||
: -0.5 * ((--t) * (t - 2) - 1),
|
||||
|
||||
easeInCubic(t) {
|
||||
return t * t * t;
|
||||
},
|
||||
easeInCubic: t => t * t * t,
|
||||
|
||||
easeOutCubic(t) {
|
||||
return (t -= 1) * t * t + 1;
|
||||
},
|
||||
easeOutCubic: t => (t -= 1) * t * t + 1,
|
||||
|
||||
easeInOutCubic(t) {
|
||||
if ((t /= 0.5) < 1) {
|
||||
return 0.5 * t * t * t;
|
||||
}
|
||||
return 0.5 * ((t -= 2) * t * t + 2);
|
||||
},
|
||||
easeInOutCubic: t => ((t /= 0.5) < 1)
|
||||
? 0.5 * t * t * t
|
||||
: 0.5 * ((t -= 2) * t * t + 2),
|
||||
|
||||
easeInQuart(t) {
|
||||
return t * t * t * t;
|
||||
},
|
||||
easeInQuart: t => t * t * t * t,
|
||||
|
||||
easeOutQuart(t) {
|
||||
return -((t -= 1) * t * t * t - 1);
|
||||
},
|
||||
easeOutQuart: t => -((t -= 1) * t * t * t - 1),
|
||||
|
||||
easeInOutQuart(t) {
|
||||
if ((t /= 0.5) < 1) {
|
||||
return 0.5 * t * t * t * t;
|
||||
}
|
||||
return -0.5 * ((t -= 2) * t * t * t - 2);
|
||||
},
|
||||
easeInOutQuart: t => ((t /= 0.5) < 1)
|
||||
? 0.5 * t * t * t * t
|
||||
: -0.5 * ((t -= 2) * t * t * t - 2),
|
||||
|
||||
easeInQuint(t) {
|
||||
return t * t * t * t * t;
|
||||
},
|
||||
easeInQuint: t => t * t * t * t * t,
|
||||
|
||||
easeOutQuint(t) {
|
||||
return (t -= 1) * t * t * t * t + 1;
|
||||
},
|
||||
easeOutQuint: t => (t -= 1) * t * t * t * t + 1,
|
||||
|
||||
easeInOutQuint(t) {
|
||||
if ((t /= 0.5) < 1) {
|
||||
return 0.5 * t * t * t * t * t;
|
||||
}
|
||||
return 0.5 * ((t -= 2) * t * t * t * t + 2);
|
||||
},
|
||||
easeInOutQuint: t => ((t /= 0.5) < 1)
|
||||
? 0.5 * t * t * t * t * t
|
||||
: 0.5 * ((t -= 2) * t * t * t * t + 2),
|
||||
|
||||
easeInSine(t) {
|
||||
return -Math.cos(t * HALF_PI) + 1;
|
||||
},
|
||||
easeInSine: t => -Math.cos(t * HALF_PI) + 1,
|
||||
|
||||
easeOutSine(t) {
|
||||
return Math.sin(t * HALF_PI);
|
||||
},
|
||||
easeOutSine: t => Math.sin(t * HALF_PI),
|
||||
|
||||
easeInOutSine(t) {
|
||||
return -0.5 * (Math.cos(PI * t) - 1);
|
||||
},
|
||||
easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),
|
||||
|
||||
easeInExpo(t) {
|
||||
return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));
|
||||
},
|
||||
easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),
|
||||
|
||||
easeOutExpo(t) {
|
||||
return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;
|
||||
},
|
||||
easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,
|
||||
|
||||
easeInOutExpo(t) {
|
||||
if (t === 0) {
|
||||
return 0;
|
||||
}
|
||||
if (t === 1) {
|
||||
return 1;
|
||||
}
|
||||
if ((t /= 0.5) < 1) {
|
||||
return 0.5 * Math.pow(2, 10 * (t - 1));
|
||||
}
|
||||
return 0.5 * (-Math.pow(2, -10 * --t) + 2);
|
||||
},
|
||||
easeInOutExpo: t => atEdge(t) ? t : t < 0.5
|
||||
? 0.5 * Math.pow(2, 10 * (t * 2 - 1))
|
||||
: 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),
|
||||
|
||||
easeInCirc(t) {
|
||||
if (t >= 1) {
|
||||
return t;
|
||||
}
|
||||
return -(Math.sqrt(1 - t * t) - 1);
|
||||
},
|
||||
easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),
|
||||
|
||||
easeOutCirc(t) {
|
||||
return Math.sqrt(1 - (t -= 1) * t);
|
||||
},
|
||||
easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),
|
||||
|
||||
easeInOutCirc(t) {
|
||||
if ((t /= 0.5) < 1) {
|
||||
return -0.5 * (Math.sqrt(1 - t * t) - 1);
|
||||
}
|
||||
return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
|
||||
},
|
||||
easeInOutCirc: t => ((t /= 0.5) < 1)
|
||||
? -0.5 * (Math.sqrt(1 - t * t) - 1)
|
||||
: 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
|
||||
|
||||
easeInElastic(t) {
|
||||
let s = 1.70158;
|
||||
let p = 0;
|
||||
let a = 1;
|
||||
if (t === 0) {
|
||||
return 0;
|
||||
}
|
||||
if (t === 1) {
|
||||
return 1;
|
||||
}
|
||||
if (!p) {
|
||||
p = 0.3;
|
||||
}
|
||||
if (a < 1) {
|
||||
a = 1;
|
||||
s = p / 4;
|
||||
} else {
|
||||
s = p / TAU * Math.asin(1 / a);
|
||||
}
|
||||
return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
|
||||
},
|
||||
easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),
|
||||
|
||||
easeOutElastic(t) {
|
||||
let s = 1.70158;
|
||||
let p = 0;
|
||||
let a = 1;
|
||||
if (t === 0) {
|
||||
return 0;
|
||||
}
|
||||
if (t === 1) {
|
||||
return 1;
|
||||
}
|
||||
if (!p) {
|
||||
p = 0.3;
|
||||
}
|
||||
if (a < 1) {
|
||||
a = 1;
|
||||
s = p / 4;
|
||||
} else {
|
||||
s = p / TAU * Math.asin(1 / a);
|
||||
}
|
||||
return a * Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
|
||||
},
|
||||
easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),
|
||||
|
||||
easeInOutElastic(t) {
|
||||
let s = 1.70158;
|
||||
let p = 0;
|
||||
let a = 1;
|
||||
if (t === 0) {
|
||||
return 0;
|
||||
}
|
||||
if ((t /= 0.5) === 2) {
|
||||
return 1;
|
||||
}
|
||||
if (!p) {
|
||||
p = 0.45;
|
||||
}
|
||||
if (a < 1) {
|
||||
a = 1;
|
||||
s = p / 4;
|
||||
} else {
|
||||
s = p / TAU * Math.asin(1 / a);
|
||||
}
|
||||
if (t < 1) {
|
||||
return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
|
||||
}
|
||||
return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * TAU / p) * 0.5 + 1;
|
||||
const s = 0.1125;
|
||||
const p = 0.45;
|
||||
return atEdge(t) ? t :
|
||||
t < 0.5
|
||||
? 0.5 * elasticIn(t * 2, s, p)
|
||||
: 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
|
||||
},
|
||||
|
||||
easeInBack(t) {
|
||||
const s = 1.70158;
|
||||
return t * t * ((s + 1) * t - s);
|
||||
@ -207,29 +97,26 @@ const effects = {
|
||||
return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
|
||||
},
|
||||
|
||||
easeInBounce(t) {
|
||||
return 1 - effects.easeOutBounce(1 - t);
|
||||
},
|
||||
easeInBounce: t => 1 - effects.easeOutBounce(1 - t),
|
||||
|
||||
easeOutBounce(t) {
|
||||
if (t < (1 / 2.75)) {
|
||||
return 7.5625 * t * t;
|
||||
const m = 7.5625;
|
||||
const d = 2.75;
|
||||
if (t < (1 / d)) {
|
||||
return m * t * t;
|
||||
}
|
||||
if (t < (2 / 2.75)) {
|
||||
return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;
|
||||
if (t < (2 / d)) {
|
||||
return m * (t -= (1.5 / d)) * t + 0.75;
|
||||
}
|
||||
if (t < (2.5 / 2.75)) {
|
||||
return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;
|
||||
if (t < (2.5 / d)) {
|
||||
return m * (t -= (2.25 / d)) * t + 0.9375;
|
||||
}
|
||||
return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;
|
||||
return m * (t -= (2.625 / d)) * t + 0.984375;
|
||||
},
|
||||
|
||||
easeInOutBounce(t) {
|
||||
if (t < 0.5) {
|
||||
return effects.easeInBounce(t * 2) * 0.5;
|
||||
}
|
||||
return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
|
||||
}
|
||||
easeInOutBounce: t => (t < 0.5)
|
||||
? effects.easeInBounce(t * 2) * 0.5
|
||||
: effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,
|
||||
};
|
||||
|
||||
export default effects;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user