{"version":3,"file":"jarallax.min.js","sources":["jarallax.js"],"sourcesContent":["/*!\n * Jarallax v2.2.1 (https://github.com/nk-o/jarallax)\n * Copyright 2024 nK \n * Licensed under MIT (https://github.com/nk-o/jarallax/blob/master/LICENSE)\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.jarallax = factory());\n})(this, (function () { 'use strict';\n\n /**\n * Document ready callback.\n * @param {Function} callback - callback will be fired once Document ready.\n */\n function ready(callback) {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n // Already ready or interactive, execute callback\n callback();\n } else {\n document.addEventListener('DOMContentLoaded', callback, {\n capture: true,\n once: true,\n passive: true\n });\n }\n }\n\n /* eslint-disable import/no-mutable-exports */\n /* eslint-disable no-restricted-globals */\n let win;\n if (typeof window !== 'undefined') {\n win = window;\n } else if (typeof global !== 'undefined') {\n win = global;\n } else if (typeof self !== 'undefined') {\n win = self;\n } else {\n win = {};\n }\n var global$1 = win;\n\n var defaults = {\n // Base parallax options.\n type: 'scroll',\n speed: 0.5,\n containerClass: 'jarallax-container',\n imgSrc: null,\n imgElement: '.jarallax-img',\n imgSize: 'cover',\n imgPosition: '50% 50%',\n imgRepeat: 'no-repeat',\n keepImg: false,\n elementInViewport: null,\n zIndex: -100,\n disableParallax: false,\n // Callbacks.\n onScroll: null,\n onInit: null,\n onDestroy: null,\n onCoverImage: null,\n // Video options.\n videoClass: 'jarallax-video',\n videoSrc: null,\n videoStartTime: 0,\n videoEndTime: 0,\n videoVolume: 0,\n videoLoop: true,\n videoPlayOnlyVisible: true,\n videoLazyLoading: true,\n disableVideo: false,\n // Video callbacks.\n onVideoInsert: null,\n onVideoWorkerInit: null\n };\n\n /**\n * Add styles to element.\n *\n * @param {Element} el - element.\n * @param {String|Object} styles - styles list.\n *\n * @returns {Element}\n */\n function css(el, styles) {\n if (typeof styles === 'string') {\n return global$1.getComputedStyle(el).getPropertyValue(styles);\n }\n Object.keys(styles).forEach(key => {\n el.style[key] = styles[key];\n });\n return el;\n }\n\n /**\n * Extend like jQuery.extend\n *\n * @param {Object} out - output object.\n * @param {...any} args - additional objects to extend.\n *\n * @returns {Object}\n */\n function extend(out, ...args) {\n out = out || {};\n Object.keys(args).forEach(i => {\n if (!args[i]) {\n return;\n }\n Object.keys(args[i]).forEach(key => {\n out[key] = args[i][key];\n });\n });\n return out;\n }\n\n /**\n * Get all parents of the element.\n *\n * @param {Element} elem - DOM element.\n *\n * @returns {Array}\n */\n function getParents(elem) {\n const parents = [];\n while (elem.parentElement !== null) {\n elem = elem.parentElement;\n if (elem.nodeType === 1) {\n parents.push(elem);\n }\n }\n return parents;\n }\n\n const {\n navigator: navigator$1\n } = global$1;\n const mobileAgent = /*#__PURE__*/ /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator$1.userAgent);\n function isMobile() {\n return mobileAgent;\n }\n\n let wndW;\n let wndH;\n let $deviceHelper;\n\n /**\n * The most popular mobile browsers changes height after page scroll and this generates image jumping.\n * We can fix it using this workaround with vh units.\n */\n function getDeviceHeight() {\n if (!$deviceHelper && document.body) {\n $deviceHelper = document.createElement('div');\n $deviceHelper.style.cssText = 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;';\n document.body.appendChild($deviceHelper);\n }\n return ($deviceHelper ? $deviceHelper.clientHeight : 0) || global$1.innerHeight || document.documentElement.clientHeight;\n }\n function updateWindowHeight() {\n wndW = global$1.innerWidth || document.documentElement.clientWidth;\n if (isMobile()) {\n wndH = getDeviceHeight();\n } else {\n wndH = global$1.innerHeight || document.documentElement.clientHeight;\n }\n }\n updateWindowHeight();\n global$1.addEventListener('resize', updateWindowHeight);\n global$1.addEventListener('orientationchange', updateWindowHeight);\n global$1.addEventListener('load', updateWindowHeight);\n ready(() => {\n updateWindowHeight();\n });\n function getWindowSize() {\n return {\n width: wndW,\n height: wndH\n };\n }\n\n // List with all jarallax instances\n // need to render all in one scroll/resize event.\n const jarallaxList = [];\n function updateParallax() {\n if (!jarallaxList.length) {\n return;\n }\n const {\n width: wndW,\n height: wndH\n } = getWindowSize();\n jarallaxList.forEach((data, k) => {\n const {\n instance,\n oldData\n } = data;\n if (!instance.isVisible()) {\n return;\n }\n const clientRect = instance.$item.getBoundingClientRect();\n const newData = {\n width: clientRect.width,\n height: clientRect.height,\n top: clientRect.top,\n bottom: clientRect.bottom,\n wndW,\n wndH\n };\n const isResized = !oldData || oldData.wndW !== newData.wndW || oldData.wndH !== newData.wndH || oldData.width !== newData.width || oldData.height !== newData.height;\n const isScrolled = isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom;\n jarallaxList[k].oldData = newData;\n if (isResized) {\n instance.onResize();\n }\n if (isScrolled) {\n instance.onScroll();\n }\n });\n global$1.requestAnimationFrame(updateParallax);\n }\n const visibilityObserver = /*#__PURE__*/new global$1.IntersectionObserver(entries => {\n entries.forEach(entry => {\n entry.target.jarallax.isElementInViewport = entry.isIntersecting;\n });\n }, {\n // We have to start parallax calculation before the block is in view\n // to prevent possible parallax jumping.\n rootMargin: '50px'\n });\n function addObserver(instance) {\n jarallaxList.push({\n instance\n });\n if (jarallaxList.length === 1) {\n global$1.requestAnimationFrame(updateParallax);\n }\n visibilityObserver.observe(instance.options.elementInViewport || instance.$item);\n }\n function removeObserver(instance) {\n jarallaxList.forEach((data, key) => {\n if (data.instance.instanceID === instance.instanceID) {\n jarallaxList.splice(key, 1);\n }\n });\n visibilityObserver.unobserve(instance.options.elementInViewport || instance.$item);\n }\n\n /* eslint-disable class-methods-use-this */\n const {\n navigator\n } = global$1;\n let instanceID = 0;\n\n // Jarallax class\n class Jarallax {\n constructor(item, userOptions) {\n const self = this;\n self.instanceID = instanceID;\n instanceID += 1;\n self.$item = item;\n self.defaults = {\n ...defaults\n };\n\n // prepare data-options\n const dataOptions = self.$item.dataset || {};\n const pureDataOptions = {};\n Object.keys(dataOptions).forEach(key => {\n const lowerCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1);\n if (lowerCaseOption && typeof self.defaults[lowerCaseOption] !== 'undefined') {\n pureDataOptions[lowerCaseOption] = dataOptions[key];\n }\n });\n self.options = self.extend({}, self.defaults, pureDataOptions, userOptions);\n self.pureOptions = self.extend({}, self.options);\n\n // prepare 'true' and 'false' strings to boolean\n Object.keys(self.options).forEach(key => {\n if (self.options[key] === 'true') {\n self.options[key] = true;\n } else if (self.options[key] === 'false') {\n self.options[key] = false;\n }\n });\n\n // fix speed option [-1.0, 2.0]\n self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed)));\n\n // prepare disableParallax callback\n if (typeof self.options.disableParallax === 'string') {\n self.options.disableParallax = new RegExp(self.options.disableParallax);\n }\n if (self.options.disableParallax instanceof RegExp) {\n const disableParallaxRegexp = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableParallax !== 'function') {\n // Support for `true` option value.\n const disableParallaxDefault = self.options.disableParallax;\n self.options.disableParallax = () => disableParallaxDefault === true;\n }\n\n // prepare disableVideo callback\n if (typeof self.options.disableVideo === 'string') {\n self.options.disableVideo = new RegExp(self.options.disableVideo);\n }\n if (self.options.disableVideo instanceof RegExp) {\n const disableVideoRegexp = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoRegexp.test(navigator.userAgent);\n }\n if (typeof self.options.disableVideo !== 'function') {\n // Support for `true` option value.\n const disableVideoDefault = self.options.disableVideo;\n self.options.disableVideo = () => disableVideoDefault === true;\n }\n\n // custom element to check if parallax in viewport\n let elementInVP = self.options.elementInViewport;\n // get first item from array\n if (elementInVP && typeof elementInVP === 'object' && typeof elementInVP.length !== 'undefined') {\n [elementInVP] = elementInVP;\n }\n // check if dom element\n if (!(elementInVP instanceof Element)) {\n elementInVP = null;\n }\n self.options.elementInViewport = elementInVP;\n self.image = {\n src: self.options.imgSrc || null,\n $container: null,\n useImgTag: false,\n // 1. Position fixed is needed for the most of browsers because absolute position have glitches\n // 2. On MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75\n // 3. Previously used 'absolute' for mobile devices. But we re-tested on iPhone 12 and 'fixed' position is working better, then 'absolute', so for now position is always 'fixed'\n position: 'fixed'\n };\n if (self.initImg() && self.canInitParallax()) {\n self.init();\n }\n }\n css(el, styles) {\n return css(el, styles);\n }\n extend(out, ...args) {\n return extend(out, ...args);\n }\n\n // get window size and scroll position. Useful for extensions\n getWindowData() {\n const {\n width,\n height\n } = getWindowSize();\n return {\n width,\n height,\n y: document.documentElement.scrollTop\n };\n }\n\n // Jarallax functions\n initImg() {\n const self = this;\n\n // find image element\n let $imgElement = self.options.imgElement;\n if ($imgElement && typeof $imgElement === 'string') {\n $imgElement = self.$item.querySelector($imgElement);\n }\n\n // check if dom element\n if (!($imgElement instanceof Element)) {\n if (self.options.imgSrc) {\n $imgElement = new Image();\n $imgElement.src = self.options.imgSrc;\n } else {\n $imgElement = null;\n }\n }\n if ($imgElement) {\n if (self.options.keepImg) {\n self.image.$item = $imgElement.cloneNode(true);\n } else {\n self.image.$item = $imgElement;\n self.image.$itemParent = $imgElement.parentNode;\n }\n self.image.useImgTag = true;\n }\n\n // true if there is img tag\n if (self.image.$item) {\n return true;\n }\n\n // get image src\n if (self.image.src === null) {\n self.image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n self.image.bgImage = self.css(self.$item, 'background-image');\n }\n return !(!self.image.bgImage || self.image.bgImage === 'none');\n }\n canInitParallax() {\n return !this.options.disableParallax();\n }\n init() {\n const self = this;\n const containerStyles = {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden'\n };\n let imageStyles = {\n pointerEvents: 'none',\n transformStyle: 'preserve-3d',\n backfaceVisibility: 'hidden'\n };\n if (!self.options.keepImg) {\n // save default user styles\n const curStyle = self.$item.getAttribute('style');\n if (curStyle) {\n self.$item.setAttribute('data-jarallax-original-styles', curStyle);\n }\n if (self.image.useImgTag) {\n const curImgStyle = self.image.$item.getAttribute('style');\n if (curImgStyle) {\n self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle);\n }\n }\n }\n\n // set relative position and z-index to the parent\n if (self.css(self.$item, 'position') === 'static') {\n self.css(self.$item, {\n position: 'relative'\n });\n }\n if (self.css(self.$item, 'z-index') === 'auto') {\n self.css(self.$item, {\n zIndex: 0\n });\n }\n\n // container for parallax image\n self.image.$container = document.createElement('div');\n self.css(self.image.$container, containerStyles);\n self.css(self.image.$container, {\n 'z-index': self.options.zIndex\n });\n\n // it will remove some image overlapping\n // overlapping occur due to an image position fixed inside absolute position element\n // needed only when background in fixed position\n if (this.image.position === 'fixed') {\n self.css(self.image.$container, {\n '-webkit-clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)',\n 'clip-path': 'polygon(0 0, 100% 0, 100% 100%, 0 100%)'\n });\n }\n\n // Add container unique ID.\n self.image.$container.setAttribute('id', `jarallax-container-${self.instanceID}`);\n\n // Add container class.\n if (self.options.containerClass) {\n self.image.$container.setAttribute('class', self.options.containerClass);\n }\n self.$item.appendChild(self.image.$container);\n\n // use img tag\n if (self.image.useImgTag) {\n imageStyles = self.extend({\n 'object-fit': self.options.imgSize,\n 'object-position': self.options.imgPosition,\n 'max-width': 'none'\n }, containerStyles, imageStyles);\n\n // use div with background image\n } else {\n self.image.$item = document.createElement('div');\n if (self.image.src) {\n imageStyles = self.extend({\n 'background-position': self.options.imgPosition,\n 'background-size': self.options.imgSize,\n 'background-repeat': self.options.imgRepeat,\n 'background-image': self.image.bgImage || `url(\"${self.image.src}\")`\n }, containerStyles, imageStyles);\n }\n }\n if (self.options.type === 'opacity' || self.options.type === 'scale' || self.options.type === 'scale-opacity' || self.options.speed === 1) {\n self.image.position = 'absolute';\n }\n\n // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed)\n // discussion - https://github.com/nk-o/jarallax/issues/9\n // 2. Check if parents have overflow scroll\n if (self.image.position === 'fixed') {\n const $parents = getParents(self.$item).filter(el => {\n const styles = global$1.getComputedStyle(el);\n const parentTransform = styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform;\n const overflowRegex = /(auto|scroll)/;\n return parentTransform && parentTransform !== 'none' || overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x']);\n });\n self.image.position = $parents.length ? 'absolute' : 'fixed';\n }\n\n // add position to parallax block\n imageStyles.position = self.image.position;\n\n // insert parallax image\n self.css(self.image.$item, imageStyles);\n self.image.$container.appendChild(self.image.$item);\n\n // set initial position and size\n self.onResize();\n self.onScroll(true);\n\n // call onInit event\n if (self.options.onInit) {\n self.options.onInit.call(self);\n }\n\n // remove default user background\n if (self.css(self.$item, 'background-image') !== 'none') {\n self.css(self.$item, {\n 'background-image': 'none'\n });\n }\n addObserver(self);\n }\n destroy() {\n const self = this;\n removeObserver(self);\n\n // return styles on container as before jarallax init\n const originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles');\n self.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesTag) {\n self.$item.removeAttribute('style');\n } else {\n self.$item.setAttribute('style', originalStylesTag);\n }\n if (self.image.useImgTag) {\n // return styles on img tag as before jarallax init\n const originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles');\n self.image.$item.removeAttribute('data-jarallax-original-styles');\n // null occurs if there is no style tag before jarallax init\n if (!originalStylesImgTag) {\n self.image.$item.removeAttribute('style');\n } else {\n self.image.$item.setAttribute('style', originalStylesTag);\n }\n\n // move img tag to its default position\n if (self.image.$itemParent) {\n self.image.$itemParent.appendChild(self.image.$item);\n }\n }\n\n // remove additional dom elements\n if (self.image.$container) {\n self.image.$container.parentNode.removeChild(self.image.$container);\n }\n\n // call onDestroy event\n if (self.options.onDestroy) {\n self.options.onDestroy.call(self);\n }\n\n // delete jarallax from item\n delete self.$item.jarallax;\n }\n coverImage() {\n const self = this;\n const {\n height: wndH\n } = getWindowSize();\n const rect = self.image.$container.getBoundingClientRect();\n const contH = rect.height;\n const {\n speed\n } = self.options;\n const isScroll = self.options.type === 'scroll' || self.options.type === 'scroll-opacity';\n let scrollDist = 0;\n let resultH = contH;\n let resultMT = 0;\n\n // scroll parallax\n if (isScroll) {\n // scroll distance and height for image\n if (speed < 0) {\n scrollDist = speed * Math.max(contH, wndH);\n if (wndH < contH) {\n scrollDist -= speed * (contH - wndH);\n }\n } else {\n scrollDist = speed * (contH + wndH);\n }\n\n // size for scroll parallax\n if (speed > 1) {\n resultH = Math.abs(scrollDist - wndH);\n } else if (speed < 0) {\n resultH = scrollDist / speed + Math.abs(scrollDist);\n } else {\n resultH += (wndH - contH) * (1 - speed);\n }\n scrollDist /= 2;\n }\n\n // store scroll distance\n self.parallaxScrollDistance = scrollDist;\n\n // vertical center\n if (isScroll) {\n resultMT = (wndH - resultH) / 2;\n } else {\n resultMT = (contH - resultH) / 2;\n }\n\n // apply result to item\n self.css(self.image.$item, {\n height: `${resultH}px`,\n marginTop: `${resultMT}px`,\n left: self.image.position === 'fixed' ? `${rect.left}px` : '0',\n width: `${rect.width}px`\n });\n\n // call onCoverImage event\n if (self.options.onCoverImage) {\n self.options.onCoverImage.call(self);\n }\n\n // return some useful data. Used in the video cover function\n return {\n image: {\n height: resultH,\n marginTop: resultMT\n },\n container: rect\n };\n }\n isVisible() {\n return this.isElementInViewport || false;\n }\n onScroll(force) {\n const self = this;\n\n // stop calculations if item is not in viewport\n if (!force && !self.isVisible()) {\n return;\n }\n const {\n height: wndH\n } = getWindowSize();\n const rect = self.$item.getBoundingClientRect();\n const contT = rect.top;\n const contH = rect.height;\n const styles = {};\n\n // calculate parallax helping variables\n const beforeTop = Math.max(0, contT);\n const beforeTopEnd = Math.max(0, contH + contT);\n const afterTop = Math.max(0, -contT);\n const beforeBottom = Math.max(0, contT + contH - wndH);\n const beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH));\n const afterBottom = Math.max(0, -contT + wndH - contH);\n const fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH));\n\n // calculate on how percent of section is visible\n let visiblePercent = 1;\n if (contH < wndH) {\n visiblePercent = 1 - (afterTop || beforeBottom) / contH;\n } else if (beforeTopEnd <= wndH) {\n visiblePercent = beforeTopEnd / wndH;\n } else if (beforeBottomEnd <= wndH) {\n visiblePercent = beforeBottomEnd / wndH;\n }\n\n // opacity\n if (self.options.type === 'opacity' || self.options.type === 'scale-opacity' || self.options.type === 'scroll-opacity') {\n styles.transform = 'translate3d(0,0,0)';\n styles.opacity = visiblePercent;\n }\n\n // scale\n if (self.options.type === 'scale' || self.options.type === 'scale-opacity') {\n let scale = 1;\n if (self.options.speed < 0) {\n scale -= self.options.speed * visiblePercent;\n } else {\n scale += self.options.speed * (1 - visiblePercent);\n }\n styles.transform = `scale(${scale}) translate3d(0,0,0)`;\n }\n\n // scroll\n if (self.options.type === 'scroll' || self.options.type === 'scroll-opacity') {\n let positionY = self.parallaxScrollDistance * fromViewportCenter;\n\n // fix if parallax block in absolute position\n if (self.image.position === 'absolute') {\n positionY -= contT;\n }\n styles.transform = `translate3d(0,${positionY}px,0)`;\n }\n self.css(self.image.$item, styles);\n\n // call onScroll event\n if (self.options.onScroll) {\n self.options.onScroll.call(self, {\n section: rect,\n beforeTop,\n beforeTopEnd,\n afterTop,\n beforeBottom,\n beforeBottomEnd,\n afterBottom,\n visiblePercent,\n fromViewportCenter\n });\n }\n }\n onResize() {\n this.coverImage();\n }\n }\n\n // global definition\n const jarallax = function (items, options, ...args) {\n // check for dom element\n // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object\n if (typeof HTMLElement === 'object' ? items instanceof HTMLElement : items && typeof items === 'object' && items !== null && items.nodeType === 1 && typeof items.nodeName === 'string') {\n items = [items];\n }\n const len = items.length;\n let k = 0;\n let ret;\n for (k; k < len; k += 1) {\n if (typeof options === 'object' || typeof options === 'undefined') {\n if (!items[k].jarallax) {\n items[k].jarallax = new Jarallax(items[k], options);\n }\n } else if (items[k].jarallax) {\n // eslint-disable-next-line prefer-spread\n ret = items[k].jarallax[options].apply(items[k].jarallax, args);\n }\n if (typeof ret !== 'undefined') {\n return ret;\n }\n }\n return items;\n };\n jarallax.constructor = Jarallax;\n\n const $ = global$1.jQuery;\n\n // jQuery support\n if (typeof $ !== 'undefined') {\n const $Plugin = function (...args) {\n Array.prototype.unshift.call(args, this);\n const res = jarallax.apply(global$1, args);\n return typeof res !== 'object' ? res : this;\n };\n $Plugin.constructor = jarallax.constructor;\n\n // no conflict\n const old$Plugin = $.fn.jarallax;\n $.fn.jarallax = $Plugin;\n $.fn.jarallax.noConflict = function () {\n $.fn.jarallax = old$Plugin;\n return this;\n };\n }\n\n // data-jarallax initialization\n ready(() => {\n jarallax(document.querySelectorAll('[data-jarallax]'));\n });\n\n return jarallax;\n\n}));\n//# sourceMappingURL=jarallax.js.map\n"],"names":["global","factory","exports","module","define","amd","globalThis","self","jarallax","this","ready","callback","document","readyState","addEventListener","capture","once","passive","let","win","global$1","window","defaults","type","speed","containerClass","imgSrc","imgElement","imgSize","imgPosition","imgRepeat","keepImg","elementInViewport","zIndex","disableParallax","onScroll","onInit","onDestroy","onCoverImage","videoClass","videoSrc","videoStartTime","videoEndTime","videoVolume","videoLoop","videoPlayOnlyVisible","videoLazyLoading","disableVideo","onVideoInsert","onVideoWorkerInit","navigator$1","mobileAgent","test","userAgent","wndW","wndH","$deviceHelper","updateWindowHeight","innerWidth","documentElement","clientWidth","body","createElement","style","cssText","appendChild","clientHeight","innerHeight","getWindowSize","width","height","jarallaxList","updateParallax","length","forEach","data","k","newData","isResized","instance","oldData","isVisible","clientRect","$item","getBoundingClientRect","top","bottom","isScrolled","onResize","requestAnimationFrame","visibilityObserver","IntersectionObserver","entries","entry","target","isElementInViewport","isIntersecting","rootMargin","navigator","instanceID","Jarallax","constructor","item","userOptions","dataOptions","dataset","pureDataOptions","Object","keys","key","lowerCaseOption","substr","toLowerCase","options","extend","pureOptions","Math","min","max","parseFloat","RegExp","disableParallaxRegexp","disableParallaxDefault","disableVideoRegexp","disableVideoDefault","elementInVP","Element","image","src","$container","useImgTag","position","initImg","canInitParallax","init","css","el","styles","getComputedStyle","getPropertyValue","out","args","i","getWindowData","y","scrollTop","$imgElement","querySelector","Image","cloneNode","$itemParent","parentNode","bgImage","$parents","containerStyles","left","overflow","imageStyles","pointerEvents","transformStyle","backfaceVisibility","curStyle","getAttribute","setAttribute","curImgStyle","z-index","-webkit-clip-path","clip-path","object-fit","object-position","max-width","background-position","background-size","background-repeat","background-image","elem","parents","parentElement","nodeType","push","filter","parentTransform","transform","call","observe","destroy","originalStylesImgTag","originalStylesTag","splice","unobserve","removeAttribute","removeChild","coverImage","rect","contH","isScroll","scrollDist","resultH","resultMT","abs","parallaxScrollDistance","marginTop","container","force","contT","beforeTop","beforeTopEnd","afterTop","beforeBottom","beforeBottomEnd","afterBottom","fromViewportCenter","visiblePercent","opacity","scale","positionY","section","items","len","HTMLElement","nodeName","ret","apply","$","jQuery","$Plugin","Array","prototype","unshift","res","old$Plugin","fn","noConflict","querySelectorAll"],"mappings":"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"}