fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 11.5 kB
Source Map (JSON)
{"version":3,"file":"easing.min.mjs","names":[],"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"],"mappings":"uuBAQA,MAAM,GAAa,EAAW,EAAW,EAAW,KAC9C,EAAI,KAAK,IAAI,EAAA,EACf,EAAI,EACJ,EAAI,EAAI,GAIN,EADE,IAAM,GAAK,IAAM,EACd,EAAI,EAAa,KAAK,KAAK,EAAA,CAE3B,EAAI,EAAa,KAAK,KAAK,EAAI,EAAA,CAGjC,CAAE,EAAA,EAAG,EAAA,EAAG,EAAA,EAAG,EAAA,EAAA,EAGd,GACJ,EACA,EACA,EACA,EACA,IAEA,EAAa,IAAG,GAAM,KAAW,KAAK,KAAM,EAAI,EAAI,GAAK,EAAa,EAAA,CAK3D,GAAkC,EAAG,EAAG,EAAG,IAAA,CACrD,EAAI,KAAK,IAAK,EAAI,EAAK,EAAA,CAAU,EAAI,EAK3B,GAAgC,EAAG,EAAG,EAAG,IACpD,GAAK,EAAI,IAAM,EAAI,EAKR,GAAiC,EAAG,EAAG,EAAG,IACrD,IAAM,EAAI,EAAI,IAAM,EAAI,GAAK,EAKlB,GAAmC,EAAG,EAAG,EAAG,KACvD,GAAK,EAAI,GACD,EACE,EAAI,EAAK,GAAK,EAAI,EAEpB,EAAI,IAAO,EAAI,IAAM,EAAI,GAAK,EAM3B,GAAgC,EAAG,EAAG,EAAG,IACpD,GAAK,GAAK,GAAK,GAAK,EAAI,EAKb,GAAiC,EAAG,EAAG,EAAG,IAAA,CACpD,IAAM,EAAI,EAAI,EAAI,GAAK,GAAK,EAAI,GAAK,EAK3B,GAAmC,EAAG,EAAG,EAAG,KACvD,GAAK,EAAI,GACD,EACE,EAAI,EAAK,GAAK,EAAI,EAAA,CAEnB,EAAI,IAAO,GAAK,GAAK,GAAK,EAAI,GAAK,EAMjC,GAAgC,EAAG,EAAG,EAAG,IACpD,GAAK,EAAI,IAAM,EAAI,EAKR,GAAiC,EAAG,EAAG,EAAG,IACrD,IAAM,EAAI,EAAI,IAAM,EAAI,GAAK,EAKlB,GAAmC,EAAG,EAAG,EAAG,KACvD,GAAK,EAAI,GACD,EACE,EAAI,EAAK,GAAK,EAAI,EAEpB,EAAI,IAAO,EAAI,IAAM,EAAI,GAAK,EAM3B,GAA+B,EAAG,EAAG,EAAG,IAAA,CAClD,EAAI,KAAK,IAAK,EAAI,EAAK,EAAA,CAAU,EAAI,EAK3B,GAAgC,EAAG,EAAG,EAAG,IACpD,EAAI,KAAK,IAAK,EAAI,EAAK,EAAA,CAAU,EAKtB,GAAkC,EAAG,EAAG,EAAG,IAAA,CACpD,EAAI,GAAM,KAAK,IAAK,KAAK,GAAK,EAAK,EAAA,CAAK,GAAK,EAKpC,GAA+B,EAAG,EAAG,EAAG,IACnD,IAAM,EAAI,EAAI,EAAI,IAAM,IAAM,EAAI,EAAI,IAAM,EAKjC,GAAgC,EAAG,EAAG,EAAG,IACpD,IAAM,EAAI,EAAI,EAAI,EAAA,EAAM,IAAA,IAAa,EAAK,GAAK,GAAK,EAKzC,GAAkC,EAAG,EAAG,EAAG,IAClD,IAAM,EACD,EAEL,IAAM,EACD,EAAI,GAEb,GAAK,EAAI,GACD,EACE,EAAI,EAAK,IAAM,IAAM,EAAI,IAAM,EAEjC,EAAI,EAAA,EAAO,IAAA,IAAM,EAAQ,GAAK,GAAK,EAMhC,GAA+B,EAAG,EAAG,EAAG,IAAA,CAClD,GAAK,KAAK,KAAK,GAAK,GAAK,GAAK,EAAA,CAAK,GAAK,EAK9B,GAAgC,EAAG,EAAG,EAAG,IACpD,EAAI,KAAK,KAAK,GAAK,EAAI,EAAI,EAAI,GAAK,EAAA,CAAK,EAK9B,GAAkC,EAAG,EAAG,EAAG,KACtD,GAAK,EAAI,GACD,EAAA,CACG,EAAI,GAAM,KAAK,KAAK,EAAI,GAAK,EAAA,CAAK,GAAK,EAE1C,EAAI,GAAM,KAAK,KAAK,GAAK,GAAK,GAAK,EAAA,CAAK,GAAK,EAM1C,GAAkC,EAAG,EAAG,EAAG,IAAA,CACtD,IACE,EAAI,EACF,EAAI,EACR,GAAI,IAAM,EACR,OAAO,EAGT,IADA,GAAK,KACK,EACR,OAAO,EAAI,EAER,IACH,EAAQ,GAAJ,GAEN,GAAA,CAAQ,EAAG,EAAO,EAAG,EAAO,EAAG,GAAU,EAAU,EAAG,EAAG,EAb/C,QAAA,CAcV,MAAA,CAAQ,EAAQ,EAAO,EAAO,EAAO,EAAG,EAAA,CAAK,GAMlC,GAAmC,EAAG,EAAG,EAAG,IAAA,CACvD,IACE,EAAI,EACF,EAAI,EACR,GAAI,IAAM,EACR,OAAO,EAGT,IADA,GAAK,KACK,EACR,OAAO,EAAI,EAER,IACH,EAAQ,GAAJ,GAEN,GAAA,CAAQ,EAAG,EAAO,EAAG,EAAO,EAAG,EAAO,EAAG,GAAU,EAAU,EAAG,EAAG,EAbzD,QAAA,CAcV,OACE,EAAQ,IAAA,IAAY,GAAK,KAAK,KAAM,EAAI,EAAI,GAAS,EAAa,EAAA,CAClE,EACA,GAOS,GAAqC,EAAG,EAAG,EAAG,IAAA,CACzD,IACE,EAAI,EACF,EAAI,EACR,GAAI,IAAM,EACR,OAAO,EAGT,IADA,GAAK,EAAI,IACC,EACR,OAAO,EAAI,EAER,IACH,EAAS,GAAM,IAAX,GAEN,GAAA,CAAQ,EAAG,EAAO,EAAG,EAAO,EAAG,EAAO,EAAG,GAAU,EAAU,EAAG,EAAG,EAbzD,QAAA,CAcV,OAAI,EAAI,EAAA,IACQ,EAAQ,EAAO,EAAO,EAAO,EAAG,EAAA,CAAK,EAGnD,EACW,IAAA,IAAU,KACnB,KAAK,KAAM,EAAI,EAAI,GAAS,EAAa,EAAA,CACzC,GACF,EACA,GAOS,GAA+B,EAAG,EAAG,EAAG,EAAG,EAAI,UAC1D,GAAK,GAAK,GAAK,IAAM,EAAI,GAAK,EAAI,GAAK,EAK5B,GAAgC,EAAG,EAAG,EAAG,EAAG,EAAI,UAC3D,IAAM,EAAI,EAAI,EAAI,GAAK,IAAM,EAAI,GAAK,EAAI,GAAK,GAAK,EAKzC,GAAkC,EAAG,EAAG,EAAG,EAAG,EAAI,WAC7D,GAAK,EAAI,GACD,EACE,EAAI,GAAM,EAAI,IAAqB,GAAd,GAAK,QAAc,EAAI,IAAM,EAEpD,EAAI,IAAO,GAAK,GAAK,IAAqB,GAAd,GAAK,QAAc,EAAI,GAAK,GAAK,EAM1D,GAAkC,EAAG,EAAG,EAAG,KACjD,GAAK,GAAK,EAAI,KACV,GAAK,OAAS,EAAI,GAAK,EACrB,EAAI,EAAI,KACV,GAAK,QAAU,GAAK,IAAM,MAAQ,EAAI,KAAQ,EAC5C,EAAI,IAAM,KACZ,GAAK,QAAU,GAAK,KAAO,MAAQ,EAAI,OAAU,EAEjD,GAAK,QAAU,GAAK,MAAQ,MAAQ,EAAI,SAAY,EAOlD,GAAiC,EAAG,EAAG,EAAG,IACrD,EAAI,EAAc,EAAI,EAAG,EAAG,EAAG,EAAA,CAAK,EAKzB,GAAoC,EAAG,EAAG,EAAG,IACxD,EAAI,EAAI,EAC2B,GAA/B,EAAiB,EAAJ,EAAO,EAAG,EAAG,EAAA,CAAW,EACD,GAApC,EAAkB,EAAJ,EAAQ,EAAG,EAAG,EAAG,EAAA,CAAe,GAAJ,EAAU,EAK7C,GAA+B,EAAG,EAAG,EAAG,IAAM,GAAK,GAAK,GAAK,EAAI,EAKjE,GAAgC,EAAG,EAAG,EAAG,IAAA,CACnD,GAAK,GAAK,IAAM,EAAI,GAAK,EAKf,GAAkC,EAAG,EAAG,EAAG,KACtD,GAAK,EAAI,GACD,EACE,EAAI,EAAK,GAAK,EAAI,EAAA,CAEnB,EAAI,GAAA,EAAQ,GAAK,EAAI,GAAK,GAAK,EAAA,OAAA,KAAA,cAAA,KAAA"}