atropos
Version:
Touch-friendly 3D parallax hover effects
1 lines • 36.4 kB
Source Map (JSON)
{"version":3,"file":"atropos.mjs.map","sources":["../src/atropos.js"],"sourcesContent":["/* eslint-disable no-restricted-globals */\nconst $ = (el, sel) => el.querySelector(sel);\nconst $$ = (el, sel) => el.querySelectorAll(sel);\n\nconst removeUndefinedProps = (obj = {}) => {\n const result = {};\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] !== 'undefined') result[key] = obj[key];\n });\n return result;\n};\nexport const defaults = {\n alwaysActive: false,\n activeOffset: 50,\n shadowOffset: 50,\n shadowScale: 1,\n duration: 300,\n rotate: true,\n rotateTouch: true,\n rotateXMax: 15,\n rotateYMax: 15,\n rotateXInvert: false,\n rotateYInvert: false,\n stretchX: 0,\n stretchY: 0,\n stretchZ: 0,\n commonOrigin: true,\n shadow: true,\n highlight: true,\n};\nfunction Atropos(originalParams = {}) {\n let { el, eventsEl } = originalParams;\n const { isComponent } = originalParams;\n let childrenRootEl;\n const self = {\n __atropos__: true,\n params: {\n ...defaults,\n onEnter: null,\n onLeave: null,\n onRotate: null,\n ...removeUndefinedProps(originalParams || {}),\n },\n destroyed: false,\n isActive: false,\n };\n\n const { params } = self;\n\n let rotateEl;\n let scaleEl;\n let innerEl;\n\n let elBoundingClientRect;\n let eventsElBoundingClientRect;\n\n let shadowEl;\n let highlightEl;\n\n let isScrolling;\n let clientXStart;\n let clientYStart;\n\n const queue = [];\n let queueFrameId;\n const purgeQueue = () => {\n queueFrameId = requestAnimationFrame(() => {\n queue.forEach((data) => {\n if (typeof data === 'function') {\n data();\n } else {\n const { element, prop, value } = data;\n element.style[prop] = value;\n }\n });\n queue.splice(0, queue.length);\n purgeQueue();\n });\n };\n purgeQueue();\n\n const $setDuration = (element, value) => {\n queue.push({ element, prop: 'transitionDuration', value });\n };\n const $setEasing = (element, value) => {\n queue.push({ element, prop: 'transitionTimingFunction', value });\n };\n const $setTransform = (element, value) => {\n queue.push({ element, prop: 'transform', value });\n };\n const $setOpacity = (element, value) => {\n queue.push({ element, prop: 'opacity', value });\n };\n const $setOrigin = (element, value) => {\n queue.push({ element, prop: 'transformOrigin', value });\n };\n const $on = (element, event, handler, props) => element.addEventListener(event, handler, props);\n const $off = (element, event, handler, props) =>\n element.removeEventListener(event, handler, props);\n\n const createShadow = () => {\n let created;\n shadowEl = $(el, '.atropos-shadow');\n if (!shadowEl) {\n shadowEl = document.createElement('span');\n shadowEl.classList.add('atropos-shadow');\n created = true;\n }\n $setTransform(\n shadowEl,\n `translate3d(0,0,-${params.shadowOffset}px) scale(${params.shadowScale})`,\n );\n if (created) {\n rotateEl.appendChild(shadowEl);\n }\n };\n const createHighlight = () => {\n let created;\n highlightEl = $(el, '.atropos-highlight');\n if (!highlightEl) {\n highlightEl = document.createElement('span');\n highlightEl.classList.add('atropos-highlight');\n created = true;\n }\n\n $setTransform(highlightEl, `translate3d(0,0,0)`);\n if (created) {\n innerEl.appendChild(highlightEl);\n }\n };\n\n const setChildrenOffset = ({\n rotateXPercentage = 0,\n rotateYPercentage = 0,\n duration,\n opacityOnly,\n easeOut,\n }) => {\n const getOpacity = (element) => {\n if (element.dataset.atroposOpacity && typeof element.dataset.atroposOpacity === 'string') {\n return element.dataset.atroposOpacity.split(';').map((v) => parseFloat(v));\n }\n return undefined;\n };\n\n $$(childrenRootEl, '[data-atropos-offset], [data-atropos-opacity]').forEach((childEl) => {\n $setDuration(childEl, duration);\n $setEasing(childEl, easeOut ? 'ease-out' : '');\n const elementOpacity = getOpacity(childEl);\n if (rotateXPercentage === 0 && rotateYPercentage === 0) {\n if (!opacityOnly) $setTransform(childEl, `translate3d(0, 0, 0)`);\n if (elementOpacity) $setOpacity(childEl, elementOpacity[0]);\n } else {\n const childElOffset = parseFloat(childEl.dataset.atroposOffset) / 100;\n if (!Number.isNaN(childElOffset) && !opacityOnly) {\n $setTransform(\n childEl,\n `translate3d(${-rotateYPercentage * -childElOffset}%, ${\n rotateXPercentage * -childElOffset\n }%, 0)`,\n );\n }\n if (elementOpacity) {\n const [min, max] = elementOpacity;\n const rotatePercentage = Math.max(\n Math.abs(rotateXPercentage),\n Math.abs(rotateYPercentage),\n );\n $setOpacity(childEl, min + ((max - min) * rotatePercentage) / 100);\n }\n }\n });\n };\n\n const setElements = (clientX, clientY) => {\n const isMultiple = el !== eventsEl;\n if (!elBoundingClientRect) {\n elBoundingClientRect = el.getBoundingClientRect();\n }\n if (isMultiple && !eventsElBoundingClientRect) {\n eventsElBoundingClientRect = eventsEl.getBoundingClientRect();\n }\n if (typeof clientX === 'undefined' && typeof clientY === 'undefined') {\n const rect = isMultiple ? eventsElBoundingClientRect : elBoundingClientRect;\n clientX = rect.left + rect.width / 2;\n clientY = rect.top + rect.height / 2;\n }\n\n let rotateX = 0;\n let rotateY = 0;\n const { top, left, width, height } = elBoundingClientRect;\n let transformOrigin;\n if (!isMultiple) {\n const centerX = width / 2;\n const centerY = height / 2;\n\n const coordX = clientX - left;\n const coordY = clientY - top;\n\n rotateY = ((params.rotateYMax * (coordX - centerX)) / (width / 2)) * -1;\n rotateX = (params.rotateXMax * (coordY - centerY)) / (height / 2);\n } else {\n const {\n top: parentTop,\n left: parentLeft,\n width: parentWidth,\n height: parentHeight,\n } = eventsElBoundingClientRect;\n const offsetLeft = left - parentLeft;\n const offsetTop = top - parentTop;\n\n const centerX = width / 2 + offsetLeft;\n const centerY = height / 2 + offsetTop;\n\n const coordX = clientX - parentLeft;\n const coordY = clientY - parentTop;\n\n rotateY = ((params.rotateYMax * (coordX - centerX)) / (parentWidth - width / 2)) * -1;\n rotateX = (params.rotateXMax * (coordY - centerY)) / (parentHeight - height / 2);\n transformOrigin = `${clientX - left}px ${clientY - top}px`;\n }\n\n rotateX = Math.min(Math.max(-rotateX, -params.rotateXMax), params.rotateXMax);\n if (params.rotateXInvert) rotateX = -rotateX;\n rotateY = Math.min(Math.max(-rotateY, -params.rotateYMax), params.rotateYMax);\n if (params.rotateYInvert) rotateY = -rotateY;\n\n const rotateXPercentage = (rotateX / params.rotateXMax) * 100;\n const rotateYPercentage = (rotateY / params.rotateYMax) * 100;\n\n const stretchX =\n (isMultiple ? (rotateYPercentage / 100) * params.stretchX : 0) *\n (params.rotateYInvert ? -1 : 1);\n const stretchY =\n (isMultiple ? (rotateXPercentage / 100) * params.stretchY : 0) *\n (params.rotateXInvert ? -1 : 1);\n const stretchZ = isMultiple\n ? (Math.max(Math.abs(rotateXPercentage), Math.abs(rotateYPercentage)) / 100) * params.stretchZ\n : 0;\n $setTransform(\n rotateEl,\n `translate3d(${stretchX}%, ${-stretchY}%, ${-stretchZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`,\n );\n if (transformOrigin && params.commonOrigin) {\n $setOrigin(rotateEl, transformOrigin);\n }\n\n if (highlightEl) {\n $setDuration(highlightEl, `${params.duration}ms`);\n $setEasing(highlightEl, 'ease-out');\n $setTransform(\n highlightEl,\n `translate3d(${-rotateYPercentage * 0.25}%, ${rotateXPercentage * 0.25}%, 0)`,\n );\n $setOpacity(\n highlightEl,\n Math.max(Math.abs(rotateXPercentage), Math.abs(rotateYPercentage)) / 100,\n );\n }\n\n setChildrenOffset({\n rotateXPercentage,\n rotateYPercentage,\n duration: `${params.duration}ms`,\n easeOut: true,\n });\n\n if (typeof params.onRotate === 'function') params.onRotate(rotateX, rotateY);\n };\n\n const activate = () => {\n queue.push(() => el.classList.add('atropos-active'));\n $setDuration(rotateEl, `${params.duration}ms`);\n $setEasing(rotateEl, 'ease-out');\n $setTransform(scaleEl, `translate3d(0,0, ${params.activeOffset}px)`);\n $setDuration(scaleEl, `${params.duration}ms`);\n $setEasing(scaleEl, 'ease-out');\n if (shadowEl) {\n $setDuration(shadowEl, `${params.duration}ms`);\n $setEasing(shadowEl, 'ease-out');\n }\n\n self.isActive = true;\n };\n\n const onPointerEnter = (e) => {\n isScrolling = undefined;\n if (e.type === 'pointerdown' && e.pointerType === 'mouse') return;\n if (e.type === 'pointerenter' && e.pointerType !== 'mouse') return;\n if (e.type === 'pointerdown') {\n e.preventDefault();\n }\n clientXStart = e.clientX;\n clientYStart = e.clientY;\n\n if (params.alwaysActive) {\n elBoundingClientRect = undefined;\n eventsElBoundingClientRect = undefined;\n return;\n }\n activate();\n if (typeof params.onEnter === 'function') params.onEnter();\n };\n\n const onTouchMove = (e) => {\n if (isScrolling === false && e.cancelable) {\n e.preventDefault();\n }\n };\n\n const onPointerMove = (e) => {\n if (!params.rotate || !self.isActive) return;\n if (e.pointerType !== 'mouse') {\n if (!params.rotateTouch) return;\n e.preventDefault();\n }\n const { clientX, clientY } = e;\n\n const diffX = clientX - clientXStart;\n const diffY = clientY - clientYStart;\n if (\n typeof params.rotateTouch === 'string' &&\n (diffX !== 0 || diffY !== 0) &&\n typeof isScrolling === 'undefined'\n ) {\n if (diffX * diffX + diffY * diffY >= 25) {\n const touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n isScrolling = params.rotateTouch === 'scroll-y' ? touchAngle > 45 : 90 - touchAngle > 45;\n }\n if (isScrolling === false) {\n el.classList.add('atropos-rotate-touch');\n if (e.cancelable) {\n e.preventDefault();\n }\n }\n }\n if (e.pointerType !== 'mouse' && isScrolling) {\n return;\n }\n setElements(clientX, clientY);\n };\n\n const onPointerLeave = (e) => {\n elBoundingClientRect = undefined;\n eventsElBoundingClientRect = undefined;\n if (!self.isActive) return;\n if (e && e.type === 'pointerup' && e.pointerType === 'mouse') return;\n if (e && e.type === 'pointerleave' && e.pointerType !== 'mouse') return;\n if (typeof params.rotateTouch === 'string' && isScrolling) {\n el.classList.remove('atropos-rotate-touch');\n }\n\n if (params.alwaysActive) {\n setElements();\n if (typeof params.onRotate === 'function') params.onRotate(0, 0);\n if (typeof params.onLeave === 'function') params.onLeave();\n return;\n }\n\n queue.push(() => el.classList.remove('atropos-active'));\n $setDuration(scaleEl, `${params.duration}ms`);\n $setEasing(scaleEl, '');\n $setTransform(scaleEl, `translate3d(0,0, ${0}px)`);\n if (shadowEl) {\n $setDuration(shadowEl, `${params.duration}ms`);\n $setEasing(shadowEl, '');\n }\n if (highlightEl) {\n $setDuration(highlightEl, `${params.duration}ms`);\n $setEasing(highlightEl, '');\n $setTransform(highlightEl, `translate3d(0, 0, 0)`);\n $setOpacity(highlightEl, 0);\n }\n $setDuration(rotateEl, `${params.duration}ms`);\n $setEasing(rotateEl, '');\n $setTransform(rotateEl, `translate3d(0,0,0) rotateX(0deg) rotateY(0deg)`);\n\n setChildrenOffset({ duration: `${params.duration}ms` });\n\n self.isActive = false;\n if (typeof params.onRotate === 'function') params.onRotate(0, 0);\n if (typeof params.onLeave === 'function') params.onLeave();\n };\n\n const onDocumentClick = (e) => {\n const clickTarget = e.target;\n if (!eventsEl.contains(clickTarget) && clickTarget !== eventsEl && self.isActive) {\n onPointerLeave();\n }\n };\n\n const initDOM = () => {\n if (typeof el === 'string') {\n el = $(document, el);\n }\n if (!el) return;\n\n // eslint-disable-next-line\n if (el.__atropos__) return;\n\n if (typeof eventsEl !== 'undefined') {\n if (typeof eventsEl === 'string') {\n eventsEl = $(document, eventsEl);\n }\n } else {\n eventsEl = el;\n }\n childrenRootEl = isComponent ? el.parentNode.host : el;\n\n Object.assign(self, {\n el,\n });\n\n rotateEl = $(el, '.atropos-rotate');\n scaleEl = $(el, '.atropos-scale');\n innerEl = $(el, '.atropos-inner');\n\n // eslint-disable-next-line\n el.__atropos__ = self;\n };\n\n const init = () => {\n initDOM();\n if (!el || !eventsEl) return;\n if (params.shadow) {\n createShadow();\n }\n if (params.highlight) {\n createHighlight();\n }\n if (params.rotateTouch) {\n if (typeof params.rotateTouch === 'string') {\n el.classList.add(`atropos-rotate-touch-${params.rotateTouch}`);\n } else {\n el.classList.add('atropos-rotate-touch');\n }\n }\n if ($(childrenRootEl, '[data-atropos-opacity]')) {\n setChildrenOffset({ opacityOnly: true });\n }\n $on(document, 'click', onDocumentClick);\n $on(eventsEl, 'pointerdown', onPointerEnter);\n $on(eventsEl, 'pointerenter', onPointerEnter);\n $on(eventsEl, 'pointermove', onPointerMove);\n $on(eventsEl, 'touchmove', onTouchMove);\n $on(eventsEl, 'pointerleave', onPointerLeave);\n $on(eventsEl, 'pointerup', onPointerLeave);\n $on(eventsEl, 'lostpointercapture', onPointerLeave);\n\n if (params.alwaysActive) {\n activate();\n setElements();\n }\n };\n\n const destroy = () => {\n self.destroyed = true;\n cancelAnimationFrame(queueFrameId);\n $off(document, 'click', onDocumentClick);\n $off(eventsEl, 'pointerdown', onPointerEnter);\n $off(eventsEl, 'pointerenter', onPointerEnter);\n $off(eventsEl, 'pointermove', onPointerMove);\n $off(eventsEl, 'touchmove', onTouchMove);\n $off(eventsEl, 'pointerleave', onPointerLeave);\n $off(eventsEl, 'pointerup', onPointerLeave);\n $off(eventsEl, 'lostpointercapture', onPointerLeave);\n // eslint-disable-next-line\n delete el.__atropos__;\n };\n\n self.destroy = destroy;\n\n init();\n\n // eslint-disable-next-line\n return self;\n}\nexport { Atropos };\nexport default Atropos;\n"],"names":["$","el","sel","querySelector","$$","querySelectorAll","removeUndefinedProps","obj","result","Object","keys","forEach","key","defaults","alwaysActive","activeOffset","shadowOffset","shadowScale","duration","rotate","rotateTouch","rotateXMax","rotateYMax","rotateXInvert","rotateYInvert","stretchX","stretchY","stretchZ","commonOrigin","shadow","highlight","Atropos","originalParams","_originalParams","eventsEl","_originalParams2","isComponent","childrenRootEl","self","__atropos__","params","_extends","onEnter","onLeave","onRotate","destroyed","isActive","rotateEl","scaleEl","innerEl","elBoundingClientRect","eventsElBoundingClientRect","shadowEl","highlightEl","isScrolling","clientXStart","clientYStart","queue","queueFrameId","purgeQueue","requestAnimationFrame","data","element","prop","value","style","splice","length","$setDuration","push","$setEasing","$setTransform","$setOpacity","$setOrigin","$on","event","handler","props","addEventListener","$off","removeEventListener","createShadow","created","document","createElement","classList","add","appendChild","createHighlight","setChildrenOffset","_ref","_ref$rotateXPercentag","rotateXPercentage","_ref$rotateYPercentag","rotateYPercentage","opacityOnly","easeOut","getOpacity","dataset","atroposOpacity","split","map","v","parseFloat","undefined","childEl","elementOpacity","childElOffset","atroposOffset","Number","isNaN","min","max","rotatePercentage","Math","abs","setElements","clientX","clientY","isMultiple","getBoundingClientRect","rect","left","width","top","height","rotateX","rotateY","_elBoundingClientRect","transformOrigin","centerX","centerY","coordX","coordY","_eventsElBoundingClie","parentTop","parentLeft","parentWidth","parentHeight","offsetLeft","offsetTop","activate","onPointerEnter","e","type","pointerType","preventDefault","onTouchMove","cancelable","onPointerMove","diffX","diffY","touchAngle","atan2","PI","onPointerLeave","remove","onDocumentClick","clickTarget","target","contains","initDOM","parentNode","host","assign","init","destroy","cancelAnimationFrame"],"mappings":"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"}