UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 12.9 kB
{"version":3,"file":"easing.min.mjs","sources":["../../../../src/util/animation/easing.ts"],"sourcesContent":["/**\n * Easing functions\n * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}\n */\n\nimport { twoMathPi, halfPI } from '../../constants';\nimport type { TEasingFunction } from './types';\n\nconst normalize = (a: number, c: number, p: number, s: number) => {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = (p / twoMathPi) * Math.asin(1);\n } else {\n s = (p / twoMathPi) * Math.asin(c / a);\n }\n }\n return { a, c, p, s };\n};\n\nconst elastic = (\n a: number,\n s: number,\n p: number,\n t: number,\n d: number,\n): number =>\n a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);\n\n/**\n * Default sinusoidal easing\n */\nexport const defaultEasing: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Cubic easing in\n */\nexport const easeInCubic: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 3 + b;\n\n/**\n * Cubic easing out\n */\nexport const easeOutCubic: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 3 + 1) + b;\n\n/**\n * Cubic easing in and out\n */\nexport const easeInOutCubic: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 3 + b;\n }\n return (c / 2) * ((t - 2) ** 3 + 2) + b;\n};\n\n/**\n * Quartic easing in\n */\nexport const easeInQuart: TEasingFunction = (t, b, c, d) =>\n c * (t /= d) * t ** 3 + b;\n\n/**\n * Quartic easing out\n */\nexport const easeOutQuart: TEasingFunction = (t, b, c, d) =>\n -c * ((t = t / d - 1) * t ** 3 - 1) + b;\n\n/**\n * Quartic easing in and out\n */\nexport const easeInOutQuart: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 4 + b;\n }\n return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;\n};\n\n/**\n * Quintic easing in\n */\nexport const easeInQuint: TEasingFunction = (t, b, c, d) =>\n c * (t / d) ** 5 + b;\n\n/**\n * Quintic easing out\n */\nexport const easeOutQuint: TEasingFunction = (t, b, c, d) =>\n c * ((t / d - 1) ** 5 + 1) + b;\n\n/**\n * Quintic easing in and out\n */\nexport const easeInOutQuint: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 5 + b;\n }\n return (c / 2) * ((t - 2) ** 5 + 2) + b;\n};\n\n/**\n * Sinusoidal easing in\n */\nexport const easeInSine: TEasingFunction = (t, b, c, d) =>\n -c * Math.cos((t / d) * halfPI) + c + b;\n\n/**\n * Sinusoidal easing out\n */\nexport const easeOutSine: TEasingFunction = (t, b, c, d) =>\n c * Math.sin((t / d) * halfPI) + b;\n\n/**\n * Sinusoidal easing in and out\n */\nexport const easeInOutSine: TEasingFunction = (t, b, c, d) =>\n (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n\n/**\n * Exponential easing in\n */\nexport const easeInExpo: TEasingFunction = (t, b, c, d) =>\n t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;\n\n/**\n * Exponential easing out\n */\nexport const easeOutExpo: TEasingFunction = (t, b, c, d) =>\n t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;\n\n/**\n * Exponential easing in and out\n */\nexport const easeInOutExpo: TEasingFunction = (t, b, c, d) => {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * 2 ** (10 * (t - 1)) + b;\n }\n return (c / 2) * -(2 ** (-10 * --t) + 2) + b;\n};\n\n/**\n * Circular easing in\n */\nexport const easeInCirc: TEasingFunction = (t, b, c, d) =>\n -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\n/**\n * Circular easing out\n */\nexport const easeOutCirc: TEasingFunction = (t, b, c, d) =>\n c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\n/**\n * Circular easing in and out\n */\nexport const easeInOutCirc: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;\n }\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\n\n/**\n * Elastic easing in\n */\nexport const easeInElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);\n return -elastic(normA, normS, normP, t, d) + b;\n};\n\n/**\n * Elastic easing out\n */\nexport const easeOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n return (\n normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +\n normC +\n b\n );\n};\n\n/**\n * Elastic easing in and out\n */\nexport const easeInOutElastic: TEasingFunction = (t, b, c, d) => {\n const s = 1.70158,\n a = c;\n let p = 0;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(normA, normS, normP, t, d) + b;\n }\n return (\n normA *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - normS) * twoMathPi) / normP) *\n 0.5 +\n normC +\n b\n );\n};\n\n/**\n * Backwards easing in\n */\nexport const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * (t /= d) * t * ((s + 1) * t - s) + b;\n\n/**\n * Backwards easing out\n */\nexport const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>\n c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\n/**\n * Backwards easing in and out\n */\nexport const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n }\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n};\n\n/**\n * Bouncing easing out\n */\nexport const easeOutBounce: TEasingFunction = (t, b, c, d) => {\n if ((t /= d) < 1 / 2.75) {\n return c * (7.5625 * t * t) + b;\n } else if (t < 2 / 2.75) {\n return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n } else if (t < 2.5 / 2.75) {\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n } else {\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n }\n};\n\n/**\n * Bouncing easing in\n */\nexport const easeInBounce: TEasingFunction = (t, b, c, d) =>\n c - easeOutBounce(d - t, 0, c, d) + b;\n\n/**\n * Bouncing easing in and out\n */\nexport const easeInOutBounce: TEasingFunction = (t, b, c, d) =>\n t < d / 2\n ? easeInBounce(t * 2, 0, c, d) * 0.5 + b\n : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\n/**\n * Quadratic easing in\n */\nexport const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;\n\n/**\n * Quadratic easing out\n */\nexport const easeOutQuad: TEasingFunction = (t, b, c, d) =>\n -c * (t /= d) * (t - 2) + b;\n\n/**\n * Quadratic easing in and out\n */\nexport const easeInOutQuad: TEasingFunction = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) {\n return (c / 2) * t ** 2 + b;\n }\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n};\n"],"names":["normalize","a","c","p","s","Math","abs","twoMathPi","asin","elastic","t","d","pow","sin","defaultEasing","b","cos","halfPI","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","PI","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","normA","normS","normP","easeOutElastic","normC","easeInOutElastic","easeInBack","arguments","length","undefined","easeOutBack","easeInOutBack","easeOutBounce","easeInBounce","easeInOutBounce","easeInQuad","easeOutQuad","easeInOutQuad"],"mappings":"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"}