UNPKG

@lagrange/animator

Version:

This library helps making parallax animations on scroll. It is built with performance in mind, as it doesn't need to relayout or paint to operate.

1 lines 45.2 kB
{"version":3,"file":"animator.mjs","sources":["../src/utils/guid.js","../src/Constants.js","../src/utils/screen.js","../src/functions/parseVal.js","../src/functions/parseRelativeVal.js","../src/functions/getContextScrollTop.js","../src/functions/valueOrDefault.js","../src/functions/precision.js","../src/functions/transform2d.js","../src/utils/constrain.js","../src/utils/Easings.js","../src/utils/map.js","../src/functions/constrainValues.js","../src/functions/transformValues.js","../src/utils/CssMatrix.js","../src/functions/getInitialMatrix.js","../src/index.js","../src/functions/parseWhen.js","../src/functions/matrix.js","../src/functions/calculate2dTransforms.js"],"sourcesContent":["//@ts-check\n\nexport function guid() {\n\treturn Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {string}\n */\nexport function elemGuid(element) {\n\tlet id = element.getAttribute('data-guid');\n\tif (!id) {\n\t\tid = guid();\n\t\telement.setAttribute('data-guid', id);\n\t}\n\treturn id;\n}\n","export const ELEM_BOTTOM = 'eb';\nexport const ELEM_TOP = 'et';\nexport const ELEM_CENTER = 'ec';\n\nexport const SCREEN_BOTTOM = 'sb';\nexport const SCREEN_TOP = 'st';\nexport const SCREEN_CENTER = 'sc';\n","import { SCREEN_TOP, SCREEN_CENTER, SCREEN_BOTTOM } from '../Constants';\n\nexport const screen = {};\n\nexport function updateScreen() {\n\tscreen[SCREEN_TOP] = 0;\n\tscreen[SCREEN_CENTER] = (window.innerHeight / 2);\n\tscreen[SCREEN_BOTTOM] = window.innerHeight;\n}\n\nupdateScreen();\n","import parseRelativeVal from './parseRelativeVal';\n\n/**\n * @param {string} prop \n * @param {string} value \n * @param {HTMLElement} elem \n */\nexport default function parseVal(prop, value, elem) {\n\tif (typeof value === 'number') return value;\n\n\tconst matches = value.match(/([-0-9.]+)(.+)/);\n\tconst val = parseFloat(matches[1]);\n\tconst unit = matches[2];\n\n\tswitch (unit) {\n\t\tcase 'vh': return (val / 100) * window.innerHeight;\n\t\tcase 'vw': return (val / 100) * window.innerWidth;\n\t\tcase 'px': return val;\n\t\tcase '%':\n\t\tdefault: return parseRelativeVal(prop, val, elem);\n\t}\n}\n","/**\n * @param {string} prop \n * @param {number} value \n * @param {HTMLElement} elem \n */\nexport default function parseRelativeVal(prop, value, elem) {\n\tconst rect = elem.getBoundingClientRect();\n\n\tswitch (prop) {\n\t\tcase 'y': return (value / 100) * rect.height;\n\t\tcase 'x':\n\t\tdefault: return (value / 100) * rect.width;\n\t}\n}\n","/**\n * @param {Element} context \n * @param {Scrollbar} scrollbar \n */\nexport default function getContextScrollTop(context) {\n\tlet ctx = context;\n\tif (context.tagName === 'HTML') ctx = document.scrollingElement || context;\n\n\treturn ctx.scrollTop;\n}\n","import precision from './precision';\n\nexport default function valueOrDefault(value, defaultValue = 0) {\n\treturn value !== undefined ? precision(value) : defaultValue;\n}\n","export default function precision(value, smallest = 0.00001) {\n\tif (!value || (value < smallest && value > -smallest)) return 0;\n\treturn value;\n}\n","import valueOrDefault from './valueOrDefault';\n\n/**\n * @typedef RawTransforms\n * @type {object}\n * @property {number} tx\n * @property {number} ty\n * @property {number} sx\n * @property {number} sy\n * @property {number} r\n */\n\nfunction getValueOrDefaults(values) {\n\treturn {\n\t\ttx: valueOrDefault(values.x, 0),\n\t\tty: valueOrDefault(values.y, 0),\n\t\trot: valueOrDefault(values.rotation, 0),\n\t\tsx: valueOrDefault(values.scaleX, 1),\n\t\tsy: valueOrDefault(values.scaleY, 1),\n\t};\n}\n\nfunction hasValues(values) {\n\treturn (\n\t\tvalues.rotation !== undefined\n\t\t|| values.scaleX !== undefined\n\t\t|| values.scaleY !== undefined\n\t\t|| values.x !== undefined\n\t\t|| values.y !== undefined\n\t\t|| values.z !== undefined\n\t);\n}\n\n/**\n * @param {object} values \n * @param {Boolean} raw \n * @returns {(object)}\n */\nfunction transform2d(values) {\n\tif (hasValues) {\n\t\tconst {\n\t\t\ttx, ty, rot, sx, sy,\n\t\t} = getValueOrDefaults(values);\n\n\t\tconst t = `translate(${tx}px, ${ty}px)`;\n\t\tconst r = `rotate(${rot}deg)`;\n\t\tconst s = `scale(${sx}, ${sy})`;\n\n\t\tvalues.transform = `${t} ${r} ${s}`;\n\t}\n\t\n\tdelete values.rotation;\n\tdelete values.scaleX;\n\tdelete values.scaleY;\n\tdelete values.x;\n\tdelete values.y;\n\tdelete values.z;\n\treturn values;\n}\n\n/**\n * @param {*} values\n * @returns {RawTransforms}\n */\nfunction transform2dRaw(values) {\n\tif (hasValues) {\n\t\tconst {\n\t\t\ttx, ty, rot, sx, sy,\n\t\t} = getValueOrDefaults(values);\n\n\t\tconst t = `translate(${tx}px, ${ty}px)`;\n\t\tconst r = `rotate(${rot}deg)`;\n\t\tconst s = `scale(${sx}, ${sy})`;\n\n\t\tvalues.transform = `${t} ${r} ${s}`;\n\n\t\treturn {\n\t\t\ttx,\n\t\t\tty,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tr: rot,\n\t\t};\n\t}\n\n\treturn getValueOrDefaults({});\n}\n\nexport { transform2d, transform2dRaw };\n","/**\n * Limits a number between a range of 2 numbers\n * @param {(string|number)} num \n * @param {number} min \n * @param {number} max \n */\nexport const constrain = (num, min, max) => {\n\tconst n = typeof num === 'string' ? parseInt(num, 10) : num;\n\treturn Math.min(Math.max(n, min), max);\n};\n","/* eslint-disable */\n\nexport default {\n\teaseInQuad(t, b, c, d) {\n\t\treturn c * (t /= d) * t + b;\n\t},\n\teaseOutQuad(t, b, c, d) {\n\t\treturn -c * (t /= d) * (t - 2) + b;\n\t},\n\teaseInOutQuad(t, b, c, d) {\n\t\tif ((t /= d / 2) < 1) return c / 2 * t * t + b;\n\t\treturn -c / 2 * ((--t) * (t - 2) - 1) + b;\n\t},\n\teaseInCubic(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t + b;\n\t},\n\teaseOutCubic(t, b, c, d) {\n\t\treturn c * ((t = t / d - 1) * t * t + 1) + b;\n\t},\n\teaseInOutCubic(t, b, c, d) {\n\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n\t\treturn c / 2 * ((t -= 2) * t * t + 2) + b;\n\t},\n\teaseInQuart(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t * t + b;\n\t},\n\teaseOutQuart(t, b, c, d) {\n\t\treturn -c * ((t = t / d - 1) * t * t * t - 1) + b;\n\t},\n\teaseInOutQuart(t, b, c, d) {\n\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n\t\treturn -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n\t},\n\teaseInQuint(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t * t * t + b;\n\t},\n\teaseOutQuint(t, b, c, d) {\n\t\treturn c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n\t},\n\teaseInOutQuint(t, b, c, d) {\n\t\tif ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n\t\treturn c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n\t},\n\teaseInSine(t, b, c, d) {\n\t\treturn -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n\t},\n\teaseOutSine(t, b, c, d) {\n\t\treturn c * Math.sin(t / d * (Math.PI / 2)) + b;\n\t},\n\teaseInOutSine(t, b, c, d) {\n\t\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n\t},\n\teaseInExpo(t, b, c, d) {\n\t\treturn (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n\t},\n\teaseOutExpo(t, b, c, d) {\n\t\treturn (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n\t},\n\teaseInOutExpo(t, b, c, d) {\n\t\tif (t == 0) return b;\n\t\tif (t == d) return b + c;\n\t\tif ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\treturn c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t},\n\teaseInCirc(t, b, c, d) {\n\t\treturn -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\t},\n\teaseOutCirc(t, b, c, d) {\n\t\treturn c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n\t},\n\teaseInOutCirc(t, b, c, d) {\n\t\tif ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n\t\treturn c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n\t},\n\teaseInElastic(t, b, c, d) {\n\t\tvar s = 1.70158; let p = 0; let a = c;\n\t\tif (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * 0.3;\n\t\tif (a < Math.abs(c)) { a = c; var s = p / 4; }\t\telse var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t},\n\teaseOutElastic(t, b, c, d) {\n\t\tvar s = 1.70158; let p = 0; let a = c;\n\t\tif (t == 0) return b; if ((t /= d) == 1) return b + c; if (!p) p = d * 0.3;\n\t\tif (a < Math.abs(c)) { a = c; var s = p / 4; }\t\telse var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n\t},\n\teaseInOutElastic(t, b, c, d) {\n\t\tvar s = 1.70158; let p = 0; let a = c;\n\t\tif (t == 0) return b; if ((t /= d / 2) == 2) return b + c; if (!p) p = d * (0.3 * 1.5);\n\t\tif (a < Math.abs(c)) { a = c; var s = p / 4; }\t\telse var s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\tif (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * 0.5 + c + b;\n\t},\n\teaseInBack(t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c * (t /= d) * t * ((s + 1) * t - s) + b;\n\t},\n\teaseOutBack(t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158;\n\t\treturn c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\t},\n\teaseInOutBack(t, b, c, d, s) {\n\t\tif (s == undefined) s = 1.70158; \n\t\tif ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n\t\treturn c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n\t},\n\teaseInBounce(t, b, c, d) {\n\t\treturn c - jQuery.easing.easeOutBounce(d - t, 0, c, d) + b;\n\t},\n\teaseOutBounce(t, b, c, d) {\n\t\tif ((t /= d) < (1 / 2.75)) {\n\t\t\treturn c * (7.5625 * t * t) + b;\n\t\t} else if (t < (2 / 2.75)) {\n\t\t\treturn c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n\t\t} else if (t < (2.5 / 2.75)) {\n\t\t\treturn c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n\t\t} \n\t\treturn c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n\t\t\n\t},\n\teaseInOutBounce(t, b, c, d) {\n\t\tif (t < d / 2) return jQuery.easing.easeInBounce(t * 2, 0, c, d) * 0.5 + b;\n\t\treturn jQuery.easing.easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n\t},\n};","/**\n * Map a number between two ranges\n * \n * @param {number} num \n * @param {number} in_min \n * @param {number} in_max \n * @param {number} out_min \n * @param {number} out_max \n */\nexport const map = (num, in_min, in_max, out_min, out_max) => {\n\tif (in_max === in_min) return out_max;\n\treturn (((num - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min;\n};\n","import { constrain } from '../utils/constrain';\nimport Easings from '../utils/Easings';\nimport { map } from '../utils/map';\n\n/**\n * @param {object} c \n * @param {AnimatorProp} prop \n */\nexport default function constrainValues(c, prop) {\n\tconst constrained = constrain(prop.st, prop.startOffset, prop.endOffset);\n\tconst prc = map(constrained, prop.startOffset, prop.endOffset, 0, 1);\n\tif (prop.ease) {\n\t\tc[prop.key] = Easings[prop.ease](prc, prop.startValue, prop.endValue - prop.startValue, 1);\n\t} else {\n\t\tc[prop.key] = map(constrained, prop.startOffset, prop.endOffset, prop.startValue, prop.endValue);\n\t}\n\treturn c;\n}\n","import constrainValues from './constrainValues';\nimport precision from './precision';\n/**\n\n * @param {AnimatorElement} el\n * @param {number} st\n */\nexport default function transformValues(el, st) {\n\treturn el.keys.map((propKey) => {\n\t\treturn {\n\t\t\tst,\n\t\t\tease: el.ease,\n\t\t\tkey: propKey,\n\t\t\t...el.keyframes[propKey]\n\t\t\t\t.reduce((propCarry, propVal, i) => {\n\t\t\t\t\tconst [offset, value] = propVal;\n\n\t\t\t\t\tswitch (i) {\n\t\t\t\t\t\tcase 0: \n\t\t\t\t\t\t\tpropCarry.startOffset = offset;\n\t\t\t\t\t\t\tpropCarry.startValue = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tpropCarry.endOffset = offset;\n\t\t\t\t\t\t\tpropCarry.endValue = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn propCarry;\n\t\t\t\t}, {}),\n\t\t};\n\t}).reduce(constrainValues, {});\n}\n","export const i2d = [\n\t1, 0, 0, 1, 0, 0,\n];\n\nexport const i3d = [\n\t1, 0, 0, 0,\n\t0, 1, 0, 0,\n\t0, 0, 1, 0,\n\t0, 0, 0, 1,\n];\n\nexport function identity() {\n\treturn [...i3d];\n}\n\nexport function identity2d() {\n\treturn [...i2d];\n}\n\nexport function translate(x, y, z) {\n\treturn [\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\tx, y, z, 1,\n\t];\n}\n\nexport function scale(w, h, d) {\n\treturn [\n\t\tw, 0, 0, 0,\n\t\t0, h, 0, 0,\n\t\t0, 0, d, 0,\n\t\t0, 0, 0, 1,\n\t];\n}\n\nexport function rotate(a) {\n\n\treturn [\n\t\tMath.cos(a), -Math.sin(a), 0, 0,\n\t\tMath.sin(a), Math.cos(a), 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1,\n\t];\n}\n\nexport function toCSS(array) {\n\treturn 'matrix3d(' + array.join(',') + ')';\n}\n\nexport function fromString(string) {\n\treturn string.replace(/matrix(?:3d)?\\(/i, '').replace(')', '').split(',').map(x => parseFloat(x.trim()));\n}\n\nexport function isIdentity2d(matrix) {\n\treturn matrix.every((x, i) => x === i2d[i]);\n}\n\n// export function fromString(string) {\n// \tconst parsed = string.match(matrixRegex);\n// \tif (parsed === null || parsed.length < 7) throw new Error(`'${string}' is not a matrix`);\n// \treturn {\n// \t\ta: parseFloat(parsed[1]),\n// \t\tb: parseFloat(parsed[2]),\n// \t\tc: parseFloat(parsed[3]),\n// \t\td: parseFloat(parsed[4]),\n// \t\te: parseFloat(parsed[5]),\n// \t\tf: parseFloat(parsed[6]),\n// \t};\n// }\n\nexport function matrix2dto3d(m) {\n\tif (m.length === 16) return m;\n\tconst n = composeMultiple([\n\t\tidentity(),\n\t\ttranslate(m[4], m[5], 0),\n\t\trotate(0),\n\t\tscale(m[0], m[3], 1),\n\t]);\n\treturn n;\n}\n\nexport function compose(a, b) {\n\tconst result = [];\n\n\tconst a00 = a[0];\n\tconst a01 = a[1];\n\tconst a02 = a[2];\n\tconst a03 = a[3];\n\tconst a10 = a[4];\n\tconst a11 = a[5];\n\tconst a12 = a[6];\n\tconst a13 = a[7];\n\tconst a20 = a[8];\n\tconst a21 = a[9];\n\tconst a22 = a[10];\n\tconst a23 = a[11];\n\tconst a30 = a[12];\n\tconst a31 = a[13];\n\tconst a32 = a[14];\n\tconst a33 = a[15];\n\n\t// Cache only the current line of the second matrix\n\tlet b0 = b[0];\n\tlet b1 = b[1];\n\tlet b2 = b[2];\n\tlet b3 = b[3];\n\tresult[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n\tresult[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n\tresult[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n\tresult[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n\tb0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7]; //eslint-disable-line\n\tresult[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n\tresult[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n\tresult[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n\tresult[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n\tb0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11]; //eslint-disable-line\n\tresult[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n\tresult[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n\tresult[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n\tresult[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n\tb0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15]; //eslint-disable-line\n\tresult[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n\tresult[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n\tresult[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n\tresult[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n\treturn result;\n}\n\nexport function composeMultiple(matrices) {\n\tlet inputMatrix = matrices[0];\n\n\tfor (let i = 1; i < matrices.length; i += 1) {\n\t\tinputMatrix = compose(inputMatrix, matrices[i]);\n\t}\n\n\treturn inputMatrix;\n}\n","import { fromString, matrix2dto3d } from '../utils/CssMatrix';\n\n/**\n * @param {HTMLElement} elem \n */\nexport function getInitialMatrix(elem, is3D = false) {\n\tconst prev = elem.style.transform;\n\telem.style.transform = '';\n\tconst transform = window.getComputedStyle(elem).getPropertyValue('transform');\n\telem.style.transform = prev;\n\t\n\tif (transform === 'none') return null;\n\n\tlet m = fromString(transform);\n\tm = (m.length < 16 && is3D) ? matrix2dto3d(m) : m;\n\t\n\treturn m;\n}\n","//@ts-check\n\n// import 'core-js/fn/array/find';\n\nimport { elemGuid } from './utils/guid';\nimport * as Constants from './Constants';\nimport { updateScreen } from './utils/screen';\nimport parseWhen from './functions/parseWhen';\nimport parseVal from './functions/parseVal';\nimport getContextScrollTop from './functions/getContextScrollTop';\nimport { transform2d } from './functions/transform2d';\nimport transformValues from './functions/transformValues';\nimport matrix from './functions/matrix';\nimport { i3d } from './utils/CssMatrix';\nimport { getInitialMatrix } from './functions/getInitialMatrix';\nimport calculate2dTransforms from './functions/calculate2dTransforms';\n\nconst ATTR_NAME = 'data-animator-id';\n\n/**\n * @typedef {object} AnimatorElement\n * @property {HTMLElement} context\n * @property {string} ease\n * @property {array} initialMatrix\n * @property {object} keyframes\n * @property {array} keys\n * @property {HTMLElement} node\n */\n\n/**\n * @typedef {object} AnimatorProp\n * @property {string} ease\n * @property {number} endOffset\n * @property {number} endValue\n * @property {string} key\n * @property {number} st\n * @property {number} startOffset\n * @property {number} startValue\n */\n\n/**\n * @typedef {object} AnimatorRect\n * @property {number} top\n * @property {number} height\n */\n\nexport default class Animator {\n\t/** @type {Animator[]} */\n\tstatic instances = [];\n\n\tstatic updateAll() {\n\t\tAnimator.instances.forEach((instance) => {\n\t\t\tinstance.updateElements();\n\t\t});\n\t}\n\n\tanimations = [];\n\n\telements = [];\n\n\tcontexts = [];\n\n\thandlerDictionnary = {};\n\n\tloopDictionnary = {};\n\n\tlastValuesDictionnary = {};\n\t\n\tanimatorTopDictionnary = {};\n\n\tconstructor() {\n\t\tAnimator.instances.push(this);\n\t}\n\n\tstatic getConstants() {\n\t\treturn {\n\t\t\t...Constants,\n\t\t};\n\t}\n\n\t/**\n\t * @param {HTMLElement} elem \n\t * @param {AnimatorRect} rect \n\t * @param {string} animationId \n\t * @param {object} props \n\t * @param {HTMLElement} child\n\t */\n\tgetKeyframes = (elem, rect, animationId, props = null, child = null) => {\n\t\tlet animation = this.animations[animationId];\n\n\t\tif (props) {\n\t\t\tanimation = props;\n\t\t} else if (animation && !Array.isArray(animation)) {\n\t\t\tanimation = animation.props;\n\t\t}\n\n\t\tif (!animation) return {};\n\t\treturn animation.reduce((c, anim) => {\n\t\t\tlet values = { ...anim };\n\t\t\tdelete values.when;\n\t\t\tvalues = Object.keys(values).map(key => [key, anim[key]]);\n\t\t\tconst from = parseWhen(rect, anim.when);\n\n\t\t\treturn values.reduce((c2, value) => {\n\t\t\t\tconst [key, val] = value;\n\t\t\t\tc2[key] = c[key] || [];\n\t\t\t\tc2[key].push([from, parseVal(key, val, child || elem)]);\n\t\t\t\treturn c2;\n\t\t\t}, c);\n\t\t}, {});\n\t}\n\n\t/**\n\t * @param {HTMLElement} context \n\t * @param {HTMLElement} elem \n\t * @returns {AnimatorRect}\n\t */\n\tgetRect = (context, elem) => {\n\t\tconst style = elem.getAttribute('style');\n\t\telem.setAttribute('style', '');\n\t\tconst { top, height } = elem.getBoundingClientRect();\n\t\tconst st = getContextScrollTop(context);\n\t\tconst id = elemGuid(context);\n\t\telem.setAttribute('style', style);\n\n\t\treturn {\n\t\t\ttop: (top - this.animatorTopDictionnary[id]) + st,\n\t\t\theight,\n\t\t};\n\t}\n\n\t/**\n\t * @param {HTMLElement} elem \n\t */\n\tgetContext = (elem) => {\n\t\tlet context = null;\n\t\tlet el = elem;\n\n\t\twhile (el.parentElement && !context) {\n\t\t\tel = el.parentElement;\n\t\t\tif (el.getAttribute('data-scrollbar') || el.getAttribute('data-scrollbar') === '') {\n\t\t\t\tcontext = el;\n\t\t\t}\n\t\t}\n\t\tif (!this.contexts.find(ctx => context === ctx)) {\n\t\t\tconst id = elemGuid(context);\n\t\t\tthis.animatorTopDictionnary[id] = el.getBoundingClientRect().top + el.scrollTop;\n\t\t\tthis.contexts.push(context);\n\t\t}\n\t\treturn context || document.scrollingElement || document.documentElement;\n\t}\n\n\n\t/**\n\t * @param {string} id\n\t * @param {object} values \n\t */\n\thasChanged = (id, values) => {\n\t\tif (!this.lastValuesDictionnary[id]) return true;\n\t\treturn this.lastValuesDictionnary[id] !== JSON.stringify(values);\n\t};\n\n\t/**\n\t * @param {HTMLElement} ctx \n\t */\n\tscroll = (ctx) => {\n\t\tconst id = elemGuid(ctx);\n\t\tconst st = getContextScrollTop(ctx);\n\t\tif (this.loopDictionnary[id]) {\n\t\t\tcancelAnimationFrame(this.loopDictionnary[id]);\n\t\t}\n\t\t\n\t\tthis.loopDictionnary[id] = requestAnimationFrame(() => {\n\t\t\tthis.update(ctx, st);\n\t\t});\n\t};\n\n\t/**\n\t * @param {Number} st \n\t */\n\tvirtualScroll = (ctx, st) => {\n\t\tthis.update(ctx, st);\n\t};\n\n\t/**\n\t * @param {HTMLElement} ctx \n\t * @param {number} st \n\t */\n\tupdate = (ctx, st) => {\n\t\tthis.elements.forEach((el) => {\n\t\t\tif (el.context !== ctx || Object.keys(el.keyframes).length === 0) return;\n\n\t\t\tconst isSVG = ~el.node.namespaceURI.indexOf('svg');\n\t\t\tlet values = null;\n\n\t\t\tif (isSVG && el.node.tagName.toLowerCase() !== 'svg') {\n\t\t\t\tvalues = transform2d(transformValues(el, st));\n\t\t\t} else if (el.is3DMatrix || (el.initialMatrix && el.initialMatrix.length === 16)) {\n\t\t\t\tif (!el.initialMatrix) el.initialMatrix = [...i3d];\n\t\t\t\tvalues = matrix(el.initialMatrix, transformValues(el, st));\n\t\t\t} else {\n\t\t\t\tvalues = calculate2dTransforms(el, st);\n\t\t\t}\n\n\t\t\tconst id = elemGuid(el.node);\n\t\t\tif (this.hasChanged(id, values)) {\n\t\t\t\tif (values) {\n\t\t\t\t\tObject.assign(el.node.style, values);\n\t\t\t\t}\n\t\t\t\tthis.lastValuesDictionnary[id] = JSON.stringify(values);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} animationId \n\t */\n\tgetEase = (animationId) => {\n\t\treturn (this.animations[animationId] && this.animations[animationId].ease) || null;\n\t}\n\n\t/**\n\t * @param {string} animationId \n\t */\n\tis3DMatrix = (animationId) => {\n\t\treturn (this.animations[animationId] && this.animations[animationId].force3d) || false;\n\t}\n\n\t/**\n\t * @param {HTMLElement} context \n\t * @param {HTMLElement} elem \n\t * @param {AnimatorRect} rect \n\t * @param {string} animationId \n\t */\n\tgetChildren = (context, elem, rect, animationId) => {\n\t\tif (Array.isArray(this.animations[animationId])) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\tconst children = (this.animations[animationId] && this.animations[animationId].children) || [];\n\n\t\treturn children.reduce((c, anim) => {\n\t\t\tconst arr = Array.from(elem.querySelectorAll(anim.selector));\n\t\t\t\n\t\t\tarr.forEach((el) => {\n\t\t\t\tconst keyframes = this.getKeyframes(elem, rect, null, anim.props, el);\n\t\t\t\t\n\t\t\t\tc.push({\n\t\t\t\t\tnode: el,\n\t\t\t\t\tparent: elem,\n\t\t\t\t\tcontext,\n\t\t\t\t\tease: anim.ease,\n\t\t\t\t\tis3DMatrix: this.is3DMatrix(animationId),\n\t\t\t\t\tkeyframes,\n\t\t\t\t\tkeys: Object.keys(keyframes),\n\t\t\t\t\tinitialMatrix: getInitialMatrix(el, this.is3DMatrix(animationId)),\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn c;\n\t\t}, []);\n\t}\n\n\t/**\n\t * @param {array} list \n\t * @param {HTMLElement} elem \n\t */\n\tparseElements = (list, elem) => {\n\t\tconst context = this.getContext(elem);\n\t\tconst animationId = elem.getAttribute(ATTR_NAME);\n\n\t\tconst rect = this.getRect(context, elem);\n\n\t\telemGuid(elem);\n\n\t\tconst keyframes = this.getKeyframes(elem, rect, animationId);\n\n\t\tconst props = {\n\t\t\tnode: elem,\n\t\t\tcontext,\n\t\t\tis3DMatrix: this.is3DMatrix(animationId),\n\t\t\tease: this.getEase(animationId),\n\t\t\tkeyframes,\n\t\t\tkeys: Object.keys(keyframes),\n\t\t\tinitialMatrix: getInitialMatrix(elem, this.is3DMatrix(animationId)),\n\t\t};\n\t\tlist.push(props);\n\n\t\treturn list.concat(this.getChildren(context, elem, rect, animationId));\n\t}\n\n\t/**\n\t * @param {HTMLElement} ctx\n\t */\n\tupdateContext = (ctx) => {\n\t\tconst id = elemGuid(ctx);\n\t\tconst context = ctx.tagName === 'HTML' ? window : ctx;\n\t\tif (this.handlerDictionnary[id]) {\n\t\t\tcontext.removeEventListener('scroll', this.handlerDictionnary[id]);\n\t\t} else {\n\t\t\tthis.handlerDictionnary[id] = () => { this.scroll(ctx); };\n\t\t}\n\t\t\n\t\tcontext.addEventListener('scroll', this.handlerDictionnary[id]);\n\n\t\tthis.handlerDictionnary[id](ctx);\n\t};\n\n\tupdateElements = () => {\n\t\tupdateScreen();\n\t\tthis.contexts = [];\n\t\tconst nodeList = document.querySelectorAll(`[${ATTR_NAME}]`);\n\t\tthis.elements = Array.from(nodeList).reduce(this.parseElements, []);\n\n\t\tthis.contexts.forEach(this.updateContext);\n\t};\n\n\t/**\n\t * @param {array} anims\n\t */\n\tsetAnimations = (anims) => {\n\t\tthis.animations = anims;\n\t\tthis.updateElements();\n\t};\n\n\t/* eslint-disable no-console */\n\tdebug = () => {\n\t\tconsole.log('animations', this.animations);\n\t\tconsole.log('all elements', this.elements);\n\t\tconsole.log('filtered elements', this.elements.filter(x => x.keys.length > 0));\n\t\tconsole.log('contexts', this.contexts);\n\t};\n}\n\n// @ts-ignore\nwindow.__Animator = Animator; // eslint-disable-line\n","import { ELEM_TOP, ELEM_CENTER, ELEM_BOTTOM } from '../Constants';\nimport { screen } from '../utils/screen';\n\n/**\n * @param {AnimatorRect} rect \n * @param {string} when \n */\nexport default function parseWhen(rect, when) {\n\tconst parts = when.split('_');\n\tif (parts.length !== 2) throw new Error('Missing parameters in animation \"when\" (expects: ELEM_* | SCREEN_*)');\n\n\tlet obj;\n\tswitch (parts[0]) {\n\t\tdefault:\n\t\tcase ELEM_TOP: obj = rect.top; break;\n\t\tcase ELEM_CENTER: obj = rect.top + (rect.height / 2); break;\n\t\tcase ELEM_BOTTOM: obj = rect.top + rect.height; break;\n\t}\n\n\treturn obj - screen[parts[1]];\n}\n","import {\n\ttoCSS,\n\tcomposeMultiple,\n\ttranslate,\n\trotate,\n\tscale,\n} from '../utils/CssMatrix';\nimport valueOrDefault from './valueOrDefault';\n\n/**\n * @param {array} initialMatrix \n * @param {object} values\n */\nexport default function matrix(initialMatrix, values) {\n\tif (\n\t\tvalues.rotation !== undefined\n\t\t|| values.scaleX !== undefined\n\t\t|| values.scaleY !== undefined\n\t\t|| values.x !== undefined\n\t\t|| values.y !== undefined\n\t\t|| values.z !== undefined\n\t) {\n\t\tvalues.transform = toCSS(composeMultiple([\n\t\t\tinitialMatrix,\n\t\t\ttranslate(valueOrDefault(values.x), valueOrDefault(values.y), valueOrDefault(values.z)),\n\t\t\trotate(valueOrDefault(values.rotation)),\n\t\t\tscale(valueOrDefault(values.scaleX, 1), valueOrDefault(values.scaleY, 1), valueOrDefault(values.scaleZ, 1)),\n\t\t]));\n\t}\n\n\tdelete values.rotation;\n\tdelete values.scaleX;\n\tdelete values.scaleY;\n\tdelete values.x;\n\tdelete values.y;\n\tdelete values.z;\n\treturn values;\n}\n","import { transform2d, transform2dRaw } from './transform2d';\nimport transformValues from './transformValues';\nimport { isIdentity2d } from '../utils/CssMatrix';\n\n/**\n * @param {HTMLElement} el \n * @param {Number} st \n */\nexport default function calculate2dTransforms(el, st) {\n\tconst vals = transformValues(el, st);\n\tconst vRaw = transform2dRaw(vals);\n\tconst v = transform2d(vals);\n\tif (v.transform && el.initialMatrix && !isIdentity2d(el.initialMatrix)) {\n\t\tconst [a, b, c, d, tx, ty] = el.initialMatrix;\n\n\t\tconst scaleX = Math.sign(a) * Math.sqrt((a * a) + (b * b));\n\t\tconst scaleY = Math.sign(d) * Math.sqrt((c * c) + (d * d));\n\t\tconst rotation = Math.atan2(-b, a);\n\n\t\tv.transform = transform2d({\n\t\t\tscaleX: scaleX * vRaw.sx,\n\t\t\tscaleY: scaleY * vRaw.sy,\n\t\t\trotation: rotation + vRaw.r,\n\t\t\tx: tx + vRaw.tx,\n\t\t\ty: ty + vRaw.ty,\n\t\t}).transform;\n\t}\n\n\treturn v;\n}\n"],"names":["elemGuid","element","id","getAttribute","Math","random","toString","substring","setAttribute","const","SCREEN_BOTTOM","SCREEN_TOP","SCREEN_CENTER","screen","updateScreen","window","innerHeight","parseVal","prop","value","elem","matches","match","val","parseFloat","innerWidth","rect","getBoundingClientRect","height","width","parseRelativeVal","getContextScrollTop","context","ctx","tagName","document","scrollingElement","scrollTop","valueOrDefault","defaultValue","undefined","smallest","precision","getValueOrDefaults","values","tx","x","ty","y","rot","rotation","sx","scaleX","sy","scaleY","hasValues","z","transform2d","transform","constrain","num","min","max","n","parseInt","easeInQuad","t","b","c","d","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInElastic","s","p","a","abs","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","jQuery","easing","easeOutBounce","easeInOutBounce","map","in_min","in_max","out_min","out_max","constrainValues","constrained","st","startOffset","endOffset","prc","key","ease","Easings","startValue","endValue","transformValues","el","keys","propKey","Object","keyframes","reduce","propCarry","propVal","i","offset","i2d","i3d","translate","scale","w","h","rotate","composeMultiple","matrices","result","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b0","b1","b2","b3","inputMatrix","length","getInitialMatrix","is3D","prev","style","getComputedStyle","getPropertyValue","m","replace","split","trim","matrix2dto3d","Animator","constructor","animations","elements","contexts","handlerDictionnary","loopDictionnary","lastValuesDictionnary","animatorTopDictionnary","getKeyframes","animationId","props","child","animation","this","Array","isArray","anim","when","from","obj","parts","Error","top","parseWhen","c2","push","getRect","getContext","parentElement","find","documentElement","hasChanged","JSON","stringify","scroll","cancelAnimationFrame","requestAnimationFrame","update","virtualScroll","forEach","node","namespaceURI","indexOf","toLowerCase","is3DMatrix","initialMatrix","scaleZ","join","matrix","vals","vRaw","r","transform2dRaw","v","every","sign","atan2","calculate2dTransforms","assign","getEase","force3d","getChildren","children","querySelectorAll","selector","parent","parseElements","list","concat","updateContext","removeEventListener","addEventListener","updateElements","nodeList","setAnimations","anims","debug","console","log","filter","instances","updateAll","instance","getConstants","Constants","__Animator"],"mappings":"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"}