{"version":3,"file":"scenebox.js","sources":["../_src/js/mouseWheel.js","../_src/js/scenebox.js"],"sourcesContent":["/**\n * 마우스휠 이벤트 방향 감지\n *\n * @param e - mouse wheel event(mousewheel DOMMouseScroll)\n * @returns {number} - Return direction(up: -1 , down: 1)\n * @example\n *\n * $(window).on('mousewheel DOMMouseScroll', function(e){\n * getWheelDirection(e)\n * });\n *\n */\n\nfunction getWheelDirection(e){\n\tif(e.type == \"DOMMouseScroll\") return e.originalEvent.detail > 0 ? 1 : -1;\n\tif(e.originalEvent.wheelDeltaY) return e.originalEvent.wheelDeltaY > 0 ? -1 : 1;\n\treturn e.originalEvent.wheelDelta > 0 ? -1 : 1;\n}\n\n/**\n * 일정시간 동안 false를 반환\n *\n * @param diffTime - 기준시간\n * @param to - true를 얻기 위한 기준시간 부터 경과 시간(1/1000 s)\n * @returns {boolean}\n */\nfunction isPreventTime(diffTime, to = 1500){\n\treturn (new Date().getTime() - diffTime) < to;\n}\n\nexport {getWheelDirection, isPreventTime};","import { getWheelDirection, isPreventTime } from './mouseWheel';\n\nclass SceneBox {\n constructor (_option) {\n if (!_option) {\n throw new TypeError('sceneBox module Need option object');\n }\n \n this.context = $(_option.selector);\n \n this.config = $.extend({\n selector: '',\n changeSpeed: 1,\n render: 0,\n renderDelay: 0,\n noRender: false,\n onStartCallback: null,\n onCompleteCallback: null,\n onAnimation: null,\n linkButton: '[data-scene-link] a',\n }, _option);\n \n this.detect = {\n state: {\n isChange: false,\n introPlay: false,\n nowLayout: 0,\n lastWheelTime: new Date().getTime(),\n direction: '',\n to: 0,\n },\n dimension: {\n containerWidth: 0,\n containerHeight: 0,\n },\n sceneList: null,\n sceneSize: 0,\n sceneLayoutObj: [],\n sceneLayoutName: [],\n sceneDetailAnimation: {},\n touch: {\n distanceX: 0,\n distanceY: 0,\n startX: 0,\n startPointX: 0,\n startPointY: 0,\n end: true,\n },\n };\n \n this.detect.sceneList = this.context.find('[data-scene]');\n this.detect.sceneSize = this.detect.sceneList.length;\n \n this._setEvent();\n this._detectContextSize();\n \n for (let i = 0, max = this.detect.sceneSize - 1; i <= max; i++) {\n this.detect.sceneLayoutObj.push($(this.detect.sceneList[i]));\n this.detect.sceneLayoutName.push($(this.detect.sceneList[i]).attr('data-scene'));\n }\n \n const to = $.inArray($(location.hash).attr('data-scene'), this.detect.sceneLayoutName) > -1 ? $.inArray($(location.hash).attr('data-scene'), this.detect.sceneLayoutName) : this.config.render;\n \n if (!this.config.noRender) {\n setTimeout(() => {\n this.render(to, true);\n }, this.config.renderDelay * 1000);\n }\n }\n \n _setEvent () {\n $(window).on('hashchange.ui.scenebox', () => {\n if ($.inArray($(location.hash).attr('data-scene'), this.detect.sceneLayoutName) < 0) return;\n this.render($.inArray($(location.hash).attr('data-scene'), this.detect.sceneLayoutName));\n });\n \n $(window).on('resize.ui.scenebox', (e) => {\n this._resize(e);\n });\n \n $(document).on('click.ui.scenebox', this.config.linkButton, (e) => {\n this._link(e);\n });\n \n if ('ontouchstart' in window) {\n this.context.on('touchstart.ui.scenebox', (e) => {\n e.stopPropagation();\n this._touchStart(e);\n });\n this.context.on('touchmove.ui.scenebox', (e) => {\n e.stopPropagation();\n this._touchMove(e);\n });\n this.context.on('touchend.ui.scenebox touchcancel.ui.scenebox', (e) => {\n e.stopPropagation();\n this._touchEnd(e);\n });\n } else {\n this.context.on('mousewheel.ui.scenebox DOMMouseScroll.ui.scenebox', (e) => {\n e.stopPropagation();\n this._wheel(e);\n });\n }\n }\n \n _detectContextSize () {\n this.detect.dimension.containerWidth = this.context[0].offsetWidth;\n this.detect.dimension.containerHeight = this.context[0].offsetHeight;\n }\n \n _resize () {\n this._detectContextSize();\n TweenMax.set($('.now', this.context), {clip: `rect(0, ${this.detect.dimension.containerWidth}, ${this.detect.dimension.containerHeight}, 0)`});\n TweenMax.set($('[data-scene-change=\"show\"]', this.context), {clip: `rect(0, ${this.detect.dimension.containerWidth}, ${this.detect.dimension.containerHeight}, 0)`});\n }\n \n _onStart (to, after, before, action) {\n this.detect.state.nowLayout = to;\n \n $('.now', this.context).removeClass('now');\n $('.before', this.context).removeClass('before');\n \n if (action === 'play') {\n after.addClass('now');\n before.addClass('before');\n }\n \n if (action === 'reverse') {\n after.addClass('before');\n before.addClass('now');\n }\n \n if (this.config.onStartCallback) {\n this.config.onStartCallback();\n }\n \n this.config.onAnimation();\n }\n \n _onComplete (after, before, action) {\n this.detect.state.isChange = false;\n \n if (action === 'reverse') {\n $('.now', this.context).removeClass('now');\n $('.before', this.context).removeClass('before');\n after.addClass('now');\n before.addClass('before');\n }\n \n if (this.config.onCompleteCallback) {\n this.config.onCompleteCallback();\n }\n \n if (!this.detect.state.introPlay) {\n this.detect.state.introPlay = true;\n }\n \n }\n \n _touchStart (e) {\n const point = e.originalEvent.touches ? e.originalEvent.touches[0] : e.originalEvent;\n \n this.detect.touch.distanceX = 0;\n this.detect.touch.distanceY = 0;\n this.detect.touch.startPointX = point.pageX;\n this.detect.touch.startPointY = point.pageY;\n }\n \n _touchMove (e) {\n if (!this.detect.touch.end) return;\n this.detect.touch.end = false;\n \n if (isPreventTime(this.detect.state.lastWheelTime)) return;\n this.detect.state.lastWheelTime = new Date().getTime();\n \n this.context.css({'pointer-events': 'none'});\n \n const point = e.originalEvent.touches ? e.originalEvent.touches[0] : e.originalEvent;\n \n this.detect.touch.distanceX += point.pageX - this.detect.touch.startPointX;\n this.detect.touch.distanceY += point.pageY - this.detect.touch.startPointY;\n \n if (Math.abs(this.detect.touch.distanceY) < 5) return;\n \n const directionY = this.detect.touch.distanceY > 0 ? -1 : 1;\n \n if (this.detect.state.nowLayout + directionY < 0 || this.detect.state.nowLayout + directionY > this.detect.sceneSize - 1) return;\n \n this.render(this.detect.state.nowLayout + directionY);\n }\n \n _touchEnd () {\n this.context.css({'pointer-events': 'auto'});\n this.detect.touch.end = true;\n }\n \n _wheel (e) {\n if (isPreventTime(this.detect.state.lastWheelTime)) return;\n this.detect.state.lastWheelTime = new Date().getTime();\n \n const direction = getWheelDirection(e);\n \n if (this.detect.state.nowLayout + direction < 0 || this.detect.state.nowLayout + direction > this.detect.sceneSize - 1) return;\n \n this.render(this.detect.state.nowLayout + direction);\n }\n \n _link (e) {\n e.preventDefault();\n \n if (this.detect.state.isChange) return;\n \n const target = $(e.target).attr('data-scene-link') ? $(e.target).attr('data-scene-link') : e.target.hash,\n idx = $.inArray($(target).attr('data-scene'), this.detect.sceneLayoutName);\n \n if ((idx - this.detect.state.nowLayout) === 0) return;\n \n this.render(idx);\n }\n \n _play (to, noAnimation) {\n this.detect.state.direction = 'play';\n \n const after = this.detect.sceneLayoutObj[to],\n before = this.detect.sceneLayoutObj[this.detect.state.nowLayout],\n width = this.detect.dimension.containerWidth,\n height = this.detect.dimension.containerHeight,\n speed = this.config.changeSpeed;\n \n let toValue = (...value) => {\n return {\n [value[0]]: value[1],\n onStart: this._onStart,\n onComplete: this._onComplete,\n onStartParams: [to, after, before, 'play'],\n onCompleteParams: [after, before, 'play'],\n callbackScope: this,\n ease: Quint.easeInOut,\n };\n };\n \n switch (after.attr('data-scene-change')) {\n case 'top':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(0, ${width}, 0, 0)`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'bottom':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(${height}, ${width}, ${height}, 0)`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'left':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(0, 0,${height}, 0)`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'right':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(0, ${width}, ${height}, ${width})`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'square':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(${height / 2}, ${width / 2}, ${height / 2}, ${width / 2})`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'openY':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(0, ${width / 2}, ${height}, ${width / 2})`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'openX':\n TweenMax.fromTo(after, noAnimation ? 0.1 : speed,\n {clip: `rect(${height / 2}, ${width}, ${height / 2}, 0)`}, toValue('clip', `rect(0, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'show':\n TweenMax.from(after, .1, toValue('opacity', 0));\n break;\n \n case 'fade':\n after.css({opacity: ''});\n TweenMax.from(after, noAnimation ? 0.1 : speed, toValue('opacity', 0));\n break;\n }\n }\n \n _reverse (to) {\n this.detect.state.direction = 'reverse';\n \n const after = this.detect.sceneLayoutObj[to],\n before = this.detect.sceneLayoutObj[this.detect.state.nowLayout],\n width = this.detect.dimension.containerWidth,\n height = this.detect.dimension.containerHeight,\n speed = this.config.changeSpeed;\n \n let toValue = (...value) => {\n return {\n [value[0]]: value[1],\n onStart: this._onStart,\n onComplete: this._onComplete,\n onStartParams: [to, after, before, 'reverse'],\n onCompleteParams: [after, before, 'reverse'],\n callbackScope: this,\n ease: Quint.easeInOut,\n };\n };\n \n switch (after.attr('data-scene-change')) {\n case 'top':\n case 'bottom':\n case 'left':\n case 'right':\n case 'square':\n case 'openY':\n case 'openX':\n TweenMax.set(after, {clip: `rect(0, ${width}, ${height}, 0)`});\n break;\n \n case 'show':\n case 'fade':\n TweenMax.set(after, {opacity: 1});\n break;\n }\n \n switch (before.attr('data-scene-change')) {\n case 'top':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width} , ${height}, 0)`}, toValue('clip', `rect(0, ${width}, 0, 0)`),\n );\n break;\n \n case 'bottom':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width} , ${height}, 0)`}, toValue('clip', `rect(${height}, ${width}, ${height}, 0)`),\n );\n break;\n \n case 'left':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width}, ${height}, 0)`}, toValue('clip', `rect(0, 0, ${height}, 0)`),\n );\n break;\n \n case 'right':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width}, ${height}, 0)`}, toValue('clip', `rect(0, ${width}, ${height}, ${width})`),\n );\n break;\n \n case 'square':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width}, ${height}, 0)`}, toValue('clip', `rect(${height / 2}, ${width / 2}, ${height / 2}, ${width / 2})`),\n );\n break;\n \n case 'openY':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width}, ${height}, 0)`}, toValue('clip', `rect(0, ${width / 2}, ${height}, ${width / 2})`),\n );\n break;\n \n case 'openX':\n TweenMax.fromTo(before, speed,\n {clip: `rect(0, ${width}, ${height}, 0)`}, toValue('clip', `rect(${height / 2}, ${width}, ${height / 2}, 0)`),\n );\n break;\n \n case 'fade':\n TweenMax.to(before, speed, toValue('opacity', 0));\n break;\n \n case 'show':\n TweenMax.from(before, .1, toValue('opacity', 1));\n break;\n }\n }\n \n setDetailAnimation (sceneName, queue) {\n this.detect.sceneDetailAnimation[sceneName] = queue;\n }\n \n render (to, noAnimation) {\n if (this.detect.state.isChange) return;\n this.detect.state.isChange = true;\n \n if (typeof to === 'string') {\n to = $.inArray($(to).attr('data-scene'), this.detect.sceneLayoutName);\n }\n \n let queue = this.detect.sceneDetailAnimation[this.detect.sceneLayoutName[to]];\n \n if (this.detect.state.introPlay && to === this.detect.state.nowLayout) return;\n \n this.state.to = to;\n \n if (to >= this.detect.state.nowLayout) {\n this._play(to, noAnimation);\n \n if (to === 0 && !this.detect.state.introPlay) {\n if (queue) {\n queue.play ? queue.play('intro') : queue();\n }\n return;\n }\n \n if (queue) {\n queue.play ? queue.play(0) : queue();\n }\n \n } else {\n this._reverse(to);\n if (queue) {\n queue.play ? queue.play('start') : queue();\n }\n }\n \n }\n \n get state () {\n return this.detect.state;\n }\n}\n\nexport default SceneBox;"],"names":["isPreventTime","diffTime","to","Date","getTime","_option","TypeError","context","$","selector","config","extend","detect","sceneList","this","find","sceneSize","length","_setEvent","_detectContextSize","i","max","sceneLayoutObj","push","sceneLayoutName","attr","inArray","location","hash","render","noRender","renderDelay","window","on","_this2","e","_resize","document","linkButton","_link","stopPropagation","_touchStart","_touchMove","_touchEnd","_wheel","dimension","containerWidth","offsetWidth","containerHeight","offsetHeight","set","clip","after","before","action","state","nowLayout","removeClass","addClass","onStartCallback","onAnimation","isChange","onCompleteCallback","introPlay","point","originalEvent","touches","touch","distanceX","distanceY","startPointX","pageX","startPointY","pageY","end","lastWheelTime","css","pointer-events","Math","abs","directionY","direction","type","detail","wheelDeltaY","wheelDelta","getWheelDirection","preventDefault","target","idx","noAnimation","width","height","speed","changeSpeed","toValue","_this3","_onStart","_onComplete","Quint","easeInOut","fromTo","from","opacity","_this4","sceneName","queue","sceneDetailAnimation","_play","play","_reverse"],"mappings":"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"}