{"version":3,"sources":["webpack:///./node_modules/gvue/src/assets/js/directives/vue-parallax-js.js"],"names":["Parallax","minWidth","this","items","itemsInVp","active","getActive","iom","IntersectionObserverManager","isLandscape","rootMargin","isPortrait","scrollEvent","move","resizeEvent","debounce","reset","window","innerWidth","el","modifiers","value","style","transition","willChange","currentStyle","getComputedStyle","height","absY","innerHeight","clientHeight","offsetHeight","scrollHeight","offsetTopParent","offsetParent","offsetTop","push","initialOffsetTop","parseInt","marginTop","addItem","element","onViewportEnter","parallaxItem","onViewportOut","unparallaxItem","find","item","filter","requestAnimationFrame","windowHeight","windowSize","scrollY","pageYOffset","map","elH","offset","pos","toFixed","setTransform","enableParallax","disableParallax","length","unobserveItems","disableEvent","observeItems","enableEvent","removeEventListener","addEventListener","passive","centerX","prop","install","Vue","p","prototype","$parallaxjs","directive","inserted","binding","add","enable"],"mappings":"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","file":"js/VueParallaxJs.js","sourcesContent":["import IntersectionObserverManager from 'nespresso-library/src/utils/IntersectionObserverManager'\nimport debounce from 'nespresso-library/src/utils/debounce'\n\nclass Parallax {\n constructor (minWidth = 767) {\n this.items = [] // Items to apply parallax\n this.itemsInVp = [] // Items in viewport to parallax\n this.minWidth = minWidth // Screen width to activate the parallax\n this.active = this.getActive() // Enable/Disable parallax\n this.iom = new IntersectionObserverManager({\n isLandscape: {\n rootMargin: '200% 0px'\n },\n isPortrait: {\n rootMargin: '200% 0px'\n }\n })\n\n this.scrollEvent = () => {\n this.move()\n }\n this.resizeEvent = debounce(() => {\n this.reset()\n this.move()\n }, 500)\n }\n\n getActive () {\n return this.minWidth <= window.innerWidth\n }\n\n add (el, { modifiers, value }) {\n // Exclude element with no speed\n if (!this.getActive() || value === 0) {\n return\n }\n el.style.transition = 'none'\n el.style.willChange = 'transform'\n const style = el.currentStyle || window.getComputedStyle(el)\n const height = modifiers.absY ? window.innerHeight : el.clientHeight || el.offsetHeight || el.scrollHeight\n const offsetTopParent = el.offsetParent ? el.offsetParent.offsetTop : 0\n\n // Add element in general array with all calcul\n this.items.push({\n el: el,\n initialOffsetTop: el.offsetTop + offsetTopParent - parseInt(style.marginTop, 10),\n style: style,\n modifiers: modifiers,\n value: value,\n clientHeight: height\n })\n\n // Observe element\n this.iom.addItem({\n element: el,\n onViewportEnter: () => {\n this.parallaxItem(el)\n },\n onViewportOut: () => {\n this.unparallaxItem(el)\n }\n })\n }\n\n parallaxItem (el) {\n this.itemsInVp.push(this.items.find(item => item.el === el))\n }\n\n unparallaxItem (el) {\n this.itemsInVp = this.itemsInVp.filter(item => item.el !== el)\n }\n\n move () {\n requestAnimationFrame(() => {\n const windowHeight = window.innerHeight\n const windowSize = (window.scrollY || window.pageYOffset) + windowHeight\n\n this.itemsInVp.map((item) => {\n const elH = item.clientHeight\n let offset = item.initialOffsetTop\n let pos = windowSize\n pos = pos - elH / 2\n pos = pos - windowHeight / 2\n pos = pos * item.value\n\n offset = item.initialOffsetTop\n offset = offset * -1\n offset = offset * item.value\n pos = pos + offset\n\n pos = pos.toFixed(2)\n\n this.setTransform(item, `translateY(${pos}px)`)\n })\n })\n }\n\n // Remove all transformations\n reset () {\n this.active = this.getActive()\n if (!this.active) {\n this.disableParallax()\n } else {\n this.enableParallax()\n }\n requestAnimationFrame(() => {\n this.items.map(item => {\n item.el.style = item.style\n })\n })\n }\n\n enable () {\n if (this.items.length === 0) {\n return\n }\n\n this.enableParallax()\n }\n\n disableParallax () {\n this.itemsInVp = []\n this.iom.unobserveItems()\n this.disableEvent()\n }\n\n enableParallax () {\n this.iom.observeItems()\n this.enableEvent()\n }\n\n disableEvent () {\n window.removeEventListener('scroll', this.scrollEvent)\n window.removeEventListener('resize', this.resizeEvent)\n }\n\n enableEvent () {\n window.addEventListener('scroll', this.scrollEvent, { passive: true })\n window.addEventListener('resize', this.resizeEvent, { passive: true })\n }\n\n // Apply style on item\n setTransform (item, value) {\n if (item.modifiers.centerX) {\n value += ' translateX(-50%)'\n }\n\n const el = item.el\n const prop = 'Transform'\n el.style[`webkit${prop}`] = value\n el.style[`moz${prop}`] = value\n el.style[`ms${prop}`] = value\n }\n}\n\nexport default {\n install: (Vue, { minWidth }) => {\n const p = new Parallax(minWidth)\n\n Vue.prototype.$parallaxjs = p\n Vue.directive('parallax', {\n inserted (el, binding) {\n p.add(el, binding)\n p.move()\n p.enable()\n }\n })\n }\n}\n"],"sourceRoot":""}