UNPKG

johnny-five

Version:

The JavaScript Robotics and Hardware Programming Framework. Use with: Arduino (all models), Electric Imp, Beagle Bone, Intel Galileo & Edison, Linino One, Pinoccio, pcDuino3, Raspberry Pi, Particle/Spark Core & Photon, Tessel 2, TI Launchpad and more!

110 lines (97 loc) 2.6 kB
const SI = 1.70158; const SIO = 1.70158 * 1.525; const SB = 7.5625; const HALF = 0.5; const { PI, cos, sin, sqrt, } = Math; const ease = {}; ease.linear = n => n; ease.inQuad = n => n * n; ease.outQuad = n => n * (2 - n); ease.inOutQuad = n => { n *= 2; return n < 1 ? HALF * n * n : -HALF * (--n * (n - 2) - 1); }; ease.inCube = n => n * n * n; ease.outCube = n => --n * n * n + 1; ease.inOutCube = n => { n *= 2; return n < 1 ? HALF * (n * n * n) : HALF * ((n -= 2) * n * n + 2); }; ease.inQuart = n => n * n * n * n; ease.outQuart = n => 1 - (--n * (n * n * n)); ease.inOutQuart = n => { n *= 2; return n < 1 ? HALF * (n * n * n * n) : -HALF * ((n -= 2) * (n * n * n) - 2); }; ease.inQuint = n => n * n * n * n * n; ease.outQuint = n => --n * (n * n * n * n) + 1; ease.inOutQuint = n => { n *= 2; return n < 1 ? HALF * (n * n * n * n * n) : HALF * ((n -= 2) * (n * n * n * n) + 2); }; ease.inSine = n => 1 - cos(n * PI / 2); ease.outSine = n => sin(n * PI / 2); ease.inOutSine = n => HALF * (1 - cos(PI * n)); ease.inExpo = n => 0 === n ? 0 : Math.pow(1024, n - 1); ease.outExpo = n => 1 === n ? n : 1 - Math.pow(2, -10 * n); ease.inOutExpo = n => { if (n === 0) { return 0; } if (n === 1) { return 1; } return (n *= 2) < 1 ? HALF * Math.pow(1024, n - 1) : HALF * (-Math.pow(2, -10 * (n - 1)) + 2); }; ease.inCirc = n => 1 - sqrt(1 - n * n); ease.outCirc = n => sqrt(1 - (--n * n)); ease.inOutCirc = n => { n *= 2; return (n < 1) ? -HALF * (sqrt(1 - n * n) - 1) : HALF * (sqrt(1 - (n -= 2) * n) + 1); }; ease.inBack = n => n * n * ((SI + 1) * n - SI); ease.outBack = n => --n * n * ((SI + 1) * n + SI) + 1; ease.inOutBack = n => { return (n *= 2) < 1 ? HALF * (n * n * ((SIO + 1) * n - SIO)) : HALF * ((n -= 2) * n * ((SIO + 1) * n + SIO) + 2); }; ease.outBounce = n => { if (n < (1 / 2.75)) { return SB * n * n; } else if (n < (2 / 2.75)) { return SB * (n -= (1.5 / 2.75)) * n + 0.75; } else if (n < (2.5 / 2.75)) { return SB * (n -= (2.25 / 2.75)) * n + 0.9375; } else { return SB * (n -= (2.625 / 2.75)) * n + 0.984375; } }; ease.inBounce = n => 1 - ease.outBounce(1 - n); ease.inOutBounce = n => { return n < HALF ? ease.inBounce(n * 2) * HALF : ease.outBounce(n * 2 - 1) * HALF + HALF; }; const exportables = {}; Object.keys(ease).forEach(key => { exportables[key.toLowerCase()] = ease[key]; }); module.exports = new Proxy({}, { get(target, property) { return exportables[property.replace(/([a-z])([A-Z])/g, "$1$2").toLowerCase()]; } });