{"version":3,"file":"585.4c5429da885153dc99f8.js","mappings":"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","sources":["webpack://drausbuettel/./JavaScript/Components/Parallax.js"],"sourcesContent":["import { extend, $$, offset, removeEvent, addEvent } from './HelperFunctions'\n\nexport class Parallax {\n constructor (settings, selectors, classes) {\n this.settings = extend({\n type: 'class', // Add class or move with \"tansform: translate(x);\" class | move\n orientation: 'down', // up | right | down | left\n distance: '20%', // Percent\n scale: '1', // Default: 1\n minScreenWidth: 0,\n maxScreenWidth: 9999,\n minScreenHeight: 0,\n maxScreenHeight: 9999,\n lastScrollPosition: 0,\n parallaxActiveClassStart: 30, // 0-100\n parallaxActiveClassEnd: 85 // 0-100\n }, settings)\n\n this.selectors = extend({\n parallax: '.parallax',\n item: '.parallax__item',\n imgToLoad: '.parallax__load-image'\n }, selectors)\n\n this.classes = extend({\n active: 'parallax--active',\n imgToLoad: 'parallax__load-image',\n animateFromTop: 'parallax--animate-from-top',\n animateFromBottom: 'parallax--animate-from-bottom'\n }, classes)\n }\n\n init () {\n this.setAnchors()\n this.addEvents()\n this.setParalax()\n }\n\n addEvents () {\n const that = this\n let resizeTimer\n\n window.addEventListener('resize', () => {\n clearTimeout(resizeTimer)\n\n resizeTimer = setTimeout(function () {\n that.setAnchors()\n that.setParalax()\n }, 250)\n })\n\n window.addEventListener('scroll', () => {\n that.setParalax()\n that.settings.lastScrollPosition = window.pageYOffset\n })\n }\n\n setAnchors () {\n const that = this\n\n $$(that.selectors.parallax).forEach((parallaxElement) => {\n const imgToLoad = $$(that.selectors.imgToLoad, parallaxElement)\n if (imgToLoad.length > 0) {\n imgToLoad.forEach((imgToLoadElement) => {\n removeEvent(imgToLoadElement, 'load')\n const loadEvent = addEvent(imgToLoadElement, 'load', function () {\n parallaxElement.dataset.parallaxScrollStart = offset(parallaxElement).top - window.innerHeight\n parallaxElement.dataset.parallaxScrollEnd = offset(parallaxElement).top + parallaxElement.getBoundingClientRect().height\n })\n\n if (imgToLoadElement.complete) {\n imgToLoadElement.classList.remove(that.classes.imgToLoad)\n imgToLoadElement.dispatchEvent(loadEvent)\n }\n })\n } else {\n parallaxElement.dataset.parallaxScrollStart = offset(parallaxElement).top - window.innerHeight\n parallaxElement.dataset.parallaxScrollEnd = offset(parallaxElement).top + parallaxElement.getBoundingClientRect().height\n }\n })\n }\n\n setParalax () {\n const that = this\n\n $$(that.selectors.parallax).forEach((parallaxElement) => {\n that.animate(parallaxElement)\n })\n }\n\n animate (parallax) {\n const that = this\n const scrollTop = window.pageYOffset\n const parallaxScrollStart = parallax.dataset.parallaxScrollStart\n const parallaxScrollEnd = parallax.dataset.parallaxScrollEnd || parallaxScrollStart\n const calculatedScrollTop = parallaxScrollStart < 0 ? scrollTop + Math.abs(parallaxScrollStart) : scrollTop\n const parallaxMinScreenWidth = parallax.dataset.parallaxMinScreenWidth || that.settings.minScreenWidth\n const parallaxMaxScreenWidth = parallax.dataset.parallaxMaxScreenWidth || that.settings.maxScreenWidth\n const parallaxMinScreenHeight = parallax.dataset.parallaxMinScreenHeight || that.settings.minScreenHeight\n const parallaxMaxScreenHeight = parallax.dataset.parallaxMaxScreenHeight || that.settings.maxScreenHeight\n let scrollDistance, scrollDistancePercent, cssTransform\n const items = $$(that.selectors.item, parallax)\n\n // viewport restrictions and check if viewport shows the paralax\n if (window.innerWidth >= parallaxMinScreenWidth &&\n window.innerWidth <= parallaxMaxScreenWidth &&\n window.innerHeight >= parallaxMinScreenHeight &&\n window.innerHeight <= parallaxMaxScreenHeight &&\n ((((window.pageYOffset + window.innerHeight) <= parallaxScrollEnd) &&\n (window.pageYOffset + window.innerHeight) >= parallaxScrollStart) ||\n ((window.pageYOffset >= parallaxScrollStart) &&\n window.pageYOffset <= parallaxScrollEnd))) {\n if (!parallax.classList.contains(that.classes.active)) {\n parallax.classList.add(that.classes.active)\n\n if (that.settings.lastScrollPosition < window.pageYOffset) {\n parallax.dataset.scrolledDirection = 'down'\n } else {\n parallax.dataset.scrolledDirection = 'up'\n }\n }\n\n // calculate scrolled distance\n scrollDistance = parallaxScrollEnd - parallaxScrollStart\n if (scrollTop < parallaxScrollStart) {\n scrollDistancePercent = 0\n } else if (scrollTop > parallaxScrollEnd) {\n scrollDistancePercent = 100\n } else {\n if (parallaxScrollStart < 0) {\n scrollDistancePercent = (calculatedScrollTop / scrollDistance) * 100\n } else {\n scrollDistancePercent = ((calculatedScrollTop - parallaxScrollStart) / scrollDistance) * 100\n }\n }\n\n items.forEach((item) => {\n const parallaxType = item.dataset.parallaxType || that.settings.type\n\n if (parallaxType === 'class') {\n const parallaxActiveClassStart = item.dataset.parallaxActiveClassStart || that.settings.parallaxActiveClassStart\n const parallaxActiveClassEnd = item.dataset.parallaxActiveClassEnd || that.settings.parallaxActiveClassEnd\n if (Math.round(scrollDistancePercent) > parallaxActiveClassStart && Math.round(scrollDistancePercent) < parallaxActiveClassEnd) {\n if (parallax.dataset.scrolledDirection === 'down') {\n item.classList.add(that.classes.animateFromTop)\n } else {\n item.classList.add(that.classes.animateFromBottom)\n }\n } else {\n item.classList.remove(that.classes.animateFromTop, that.classes.animateFromBottom)\n }\n } else if (parallaxType === 'move') {\n const parallaxOrientation = item.dataset.parallaxOrientation || that.settings.orientation\n const parallaxScale = item.dataset.parallaxScale || that.settings.scale\n let parallaxDistance = that.getScrollDistance(item.dataset.parallaxDistance || that.settings.distance, item, parallaxOrientation)\n\n if (parallaxOrientation === 'down') {\n if (!parallaxDistance) {\n parallaxDistance = item.getBoundingClientRect().height / 4\n }\n\n cssTransform = 'translateY(' + (((parallaxDistance / 100) * scrollDistancePercent) - (parallaxDistance / 2)) + 'px)'\n } else if (parallaxOrientation === 'up') {\n if (!parallaxDistance) {\n parallaxDistance = item.getBoundingClientRect().height / 4\n }\n\n cssTransform = 'translateY(' + (((parallaxDistance / 100) * (100 - scrollDistancePercent)) - (parallaxDistance / 2)) + 'px)'\n } else if (parallaxOrientation === 'left') {\n if (!parallaxDistance) {\n parallaxDistance = item.getBoundingClientRect().width / 4\n }\n\n cssTransform = 'translateX(' + (((parallaxDistance / 100) * (100 - scrollDistancePercent)) - (parallaxDistance / 2)) + 'px)'\n } else if (parallaxOrientation === 'right') {\n if (!parallaxDistance) {\n parallaxDistance = item.getBoundingClientRect().width / 4\n }\n\n cssTransform = 'translateX(' + (((parallaxDistance / 100) * scrollDistancePercent) - (parallaxDistance / 2)) + 'px)'\n }\n\n if (parallaxScale !== '1') {\n cssTransform += 'scale(' + parallaxScale + ')'\n }\n\n item.style.transform = cssTransform\n }\n })\n } else {\n if (parallax.classList.contains(that.classes.active)) {\n items.forEach((item) => {\n item.style.transform = ''\n item.classList.remove(that.classes.animateFromTop, that.classes.animateFromBottom)\n })\n\n parallax.classList.remove(that.classes.active)\n }\n }\n }\n\n getScrollDistance (value, element, orientation) {\n const regExPercent = /\\d+(\\\\.\\\\d+)?%/g\n\n if (typeof value === 'string') {\n if (value.indexOf('%')) {\n const percentArr = value.match(regExPercent)\n\n if (percentArr.length > 0) {\n const percentToNumber = parseFloat(percentArr[0])\n\n if (orientation === 'down' || orientation === 'up') {\n return ((element.getBoundingClientRect().height * percentToNumber) / 100)\n } else {\n return ((element.getBoundingClientRect().width * percentToNumber) / 100)\n }\n }\n }\n }\n\n return value\n }\n}\n\nexport default Parallax\n"],"names":["Parallax","constructor","settings","selectors","classes","this","type","orientation","distance","scale","minScreenWidth","maxScreenWidth","minScreenHeight","maxScreenHeight","lastScrollPosition","parallaxActiveClassStart","parallaxActiveClassEnd","parallax","item","imgToLoad","active","animateFromTop","animateFromBottom","init","setAnchors","addEvents","setParalax","that","resizeTimer","window","addEventListener","clearTimeout","setTimeout","pageYOffset","$$","forEach","parallaxElement","length","imgToLoadElement","loadEvent","dataset","parallaxScrollStart","top","innerHeight","parallaxScrollEnd","getBoundingClientRect","height","complete","classList","remove","dispatchEvent","animate","scrollTop","calculatedScrollTop","Math","abs","parallaxMinScreenWidth","parallaxMaxScreenWidth","parallaxMinScreenHeight","parallaxMaxScreenHeight","scrollDistance","scrollDistancePercent","cssTransform","items","innerWidth","contains","add","scrolledDirection","parallaxType","round","parallaxOrientation","parallaxScale","parallaxDistance","getScrollDistance","width","style","transform","value","element","regExPercent","indexOf","percentArr","match","percentToNumber","parseFloat"],"sourceRoot":""}