UNPKG

vue-carousel-3d

Version:

Beautiful, flexible and touch supported 3D Carousel for Vue.js

1 lines 47.9 kB
{"version":3,"file":"carousel-3d.es.mjs","names":["isBrowser","Carousel3d","Slide"],"sources":["../src/carousel-3d/Slide.vue","../src/carousel-3d/core/carousel.js","../src/carousel-3d/mixins/autoplay.js","../src/carousel-3d/Controls.vue","../src/carousel-3d/Dots.vue","../src/carousel-3d/Carousel3d.vue","../src/carousel-3d/index.js"],"sourcesContent":["<template>\r\n\t<div class=\"carousel-3d-slide\" :style=\"slideStyle\" :class=\"computedClasses\" @click=\"goTo()\"\r\n role=\"group\" aria-roledescription=\"slide\" :aria-hidden=\"String(!isCurrent)\"\r\n :aria-label=\"slideAriaLabel\">\r\n\t\t<slot v-if=\"shouldRenderContent\" :index=\"index\" :isCurrent=\"isCurrent\" :leftIndex=\"leftIndex\" :rightIndex=\"rightIndex\"/>\r\n\t</div>\r\n</template>\r\n\r\n<script>\r\n export default {\r\n name: 'slide',\r\n props: {\r\n index: {\r\n type: Number\r\n }\r\n },\r\n inject: ['carousel'],\r\n data () {\r\n return {\r\n styles: {},\r\n zIndex: 999\r\n }\r\n },\r\n computed: {\r\n parent () {\r\n return this.carousel\r\n },\r\n isCurrent () {\r\n return this.index === this.parent.currentIndex\r\n },\r\n shouldRenderContent () {\r\n if (!this.parent.lazy) return true\r\n\r\n const distance = Math.abs(this.index - this.parent.currentIndex)\r\n const circularDistance = Math.min(distance, this.parent.total - distance)\r\n const margin = Math.max(this.parent.visible + 1, 3)\r\n\r\n return circularDistance <= margin\r\n },\r\n slideAriaLabel () {\r\n return Number.isInteger(this.index) ? `${this.index + 1} of ${this.parent.total}` : undefined\r\n },\r\n leftIndex () {\r\n if (this.parent.oneDirectional && this.getSideIndex(this.parent.leftIndices) > this.parent.currentIndex - 1) return -1;\r\n\r\n return this.getSideIndex(this.parent.leftIndices)\r\n },\r\n rightIndex () {\r\n if (this.parent.oneDirectional && this.getSideIndex(this.parent.rightIndices) > this.parent.total - this.parent.currentIndex - 2) return -1;\r\n\r\n return this.getSideIndex(this.parent.rightIndices)\r\n },\r\n slideStyle () {\r\n let styles = {}\r\n\r\n if (!this.isCurrent) {\r\n const lIndex = this.leftIndex\r\n const rIndex = this.rightIndex\r\n if (rIndex >= 0 || lIndex >= 0) {\r\n styles = rIndex >= 0 ? this.calculatePosition(rIndex, true, this.zIndex) : this.calculatePosition(lIndex, false, this.zIndex)\r\n styles.opacity = 1\r\n styles.visibility = 'visible'\r\n }\r\n\r\n if (this.parent.hasHiddenSlides) {\r\n if (this.matchIndex(this.parent.leftOutIndex)) {\r\n styles = this.calculatePosition(this.parent.leftIndices.length - 1, false, this.zIndex)\r\n } else if (this.matchIndex(this.parent.rightOutIndex)) {\r\n styles = this.calculatePosition(this.parent.rightIndices.length - 1, true, this.zIndex)\r\n }\r\n }\r\n }\r\n\r\n return Object.assign(styles, {\r\n 'border-width': this.parent.border + 'px',\r\n 'width': this.parent.slideWidth + 'px',\r\n 'height': this.parent.slideHeight + 'px',\r\n 'transition': ' transform ' + this.parent.animationSpeed + 'ms, ' +\r\n ' opacity ' + this.parent.animationSpeed + 'ms, ' +\r\n ' visibility ' + this.parent.animationSpeed + 'ms'\r\n })\r\n },\r\n computedClasses () {\r\n return {\r\n [`left-${this.leftIndex + 1}`]: this.leftIndex >= 0,\r\n [`right-${this.rightIndex + 1}`]: this.rightIndex >= 0,\r\n 'current': this.isCurrent\r\n }\r\n }\r\n },\r\n methods: {\r\n getSideIndex (array) {\r\n let index = -1\r\n\r\n array.forEach((pos, i) => {\r\n if (this.matchIndex(pos)) {\r\n index = i\r\n }\r\n })\r\n\r\n return index\r\n },\r\n matchIndex (index) {\r\n return (index >= 0) ? this.index === index : (this.parent.total + index) === this.index\r\n },\r\n calculatePosition (i, positive, zIndex) {\r\n const z = !this.parent.disable3d ? parseInt(this.parent.inverseScaling) + ((i + 1) * 100) : 0\r\n const y = !this.parent.disable3d ? parseInt(this.parent.perspective) : 0\r\n const leftRemain = (this.parent.space === 'auto')\r\n ? parseInt((i + 1) * (this.parent.width / 1.5), 10)\r\n : parseInt((i + 1) * (this.parent.space), 10)\r\n const horizon = this.parent.horizonOffset ? parseInt(this.parent.horizonOffset, 10) * (i + 1) : 0\r\n const transform = (positive)\r\n ? 'translateX(' + (leftRemain) + 'px) translateZ(-' + z + 'px) ' +\r\n 'rotateY(-' + y + 'deg)' + (horizon ? ' translateY(' + horizon + 'px)' : '')\r\n : 'translateX(-' + (leftRemain) + 'px) translateZ(-' + z + 'px) ' +\r\n 'rotateY(' + y + 'deg)' + (horizon ? ' translateY(' + horizon + 'px)' : '')\r\n const top = this.parent.space === 'auto' ? 0 : parseInt((i + 1) * (this.parent.space))\r\n\r\n return {\r\n transform: transform,\r\n top: top,\r\n zIndex: zIndex - (Math.abs(i) + 1)\r\n }\r\n },\r\n goTo () {\r\n if (!this.isCurrent) {\r\n if (this.parent.clickable === true) {\r\n this.parent.goFar(this.index)\r\n }\r\n } else {\r\n const {index} = this;\r\n this.parent.onMainSlideClick({index});\r\n }\r\n }\r\n }\r\n }\r\n</script>\r\n\r\n<style>\r\n\t.carousel-3d-slide {\r\n\t\tposition: absolute;\r\n\t\topacity: 0;\r\n\t\tvisibility: hidden;\r\n\t\toverflow: hidden;\r\n\t\ttop: 0;\r\n\t\tborder-radius: 1px;\r\n\t\tborder-color: #000;\r\n\t\tborder-color: rgba(0, 0, 0, 0.4);\r\n\t\tborder-style: solid;\r\n\t\tbackground-size: cover;\r\n\t\tbackground-color: #ccc;\r\n\t\tdisplay: block;\r\n\t\tmargin: 0;\r\n\t\tbox-sizing: border-box;\r\n\t}\r\n\r\n\t.carousel-3d-slide {\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.carousel-3d-slide img {\r\n\t\twidth: 100%;\r\n\t}\r\n\r\n\t.carousel-3d-slide.current {\r\n\t\topacity: 1 !important;\r\n\t\tvisibility: visible !important;\r\n\t\ttransform: none !important;\r\n\t\tz-index: 999;\r\n\t}\r\n\r\n</style>\r\n","export function getVisibleSlideCount (display, total) {\r\n return display > total ? total : display\r\n}\r\n\r\nexport function getSideIndices ({ currentIndex, total, visible, bias, dir, side }) {\r\n let count = (visible - 1) / 2\r\n const isLeft = side === 'left'\r\n const prefersExtraSlide = bias.toLowerCase() === side\r\n\r\n count = prefersExtraSlide ? Math.ceil(count) : Math.floor(count)\r\n\r\n const indices = []\r\n for (let position = 1; position <= count; position++) {\r\n const movesForward = (isLeft && dir === 'ltr') || (!isLeft && dir !== 'ltr')\r\n indices.push(movesForward\r\n ? (currentIndex + position) % total\r\n : (currentIndex - position) % total)\r\n }\r\n\r\n return indices\r\n}\r\n\r\nexport function getOutIndex ({ currentIndex, total, visible, bias, dir, side }) {\r\n const isLeft = side === 'left'\r\n let offset = (visible - 1) / 2\r\n const prefersExtraSlide = bias.toLowerCase() === side\r\n\r\n offset = (prefersExtraSlide ? Math.ceil(offset) : Math.floor(offset)) + 1\r\n\r\n if ((isLeft && dir === 'ltr') || (!isLeft && dir !== 'ltr')) {\r\n return (total - currentIndex - offset) <= 0\r\n ? -parseInt(total - currentIndex - offset, 10)\r\n : currentIndex + offset\r\n }\r\n\r\n return currentIndex - offset\r\n}\r\n\r\nexport function getSafeIndex (index, total) {\r\n const targetIndex = parseInt(index, 10)\r\n\r\n return !Number.isFinite(targetIndex) || targetIndex < 0 || targetIndex >= total\r\n ? 0\r\n : targetIndex\r\n}\r\n\r\nexport function getStartIndex (index, total) {\r\n if (total === 0) return 0\r\n\r\n const startIndex = Math.max(0, parseInt(index, 10) || 0)\r\n return startIndex > total - 1 ? total - 1 : startIndex\r\n}\r\n","const isBrowser = typeof window !== 'undefined'\r\n\r\nconst autoplay = {\r\n props: {\r\n autoplay: {\r\n type: Boolean,\r\n default: false\r\n },\r\n autoplayTimeout: {\r\n type: Number,\r\n default: 2000\r\n },\r\n autoplayHoverPause: {\r\n type: Boolean,\r\n default: true\r\n }\r\n },\r\n data () {\r\n return {\r\n autoplayInterval: null\r\n }\r\n },\r\n mounted () {\r\n if (!isBrowser) return\r\n\r\n if (this.autoplayHoverPause) {\r\n this.$el.addEventListener('mouseenter', this.pauseAutoplay)\r\n this.$el.addEventListener('mouseleave', this.startAutoplay)\r\n }\r\n\r\n this.startAutoplay()\r\n },\r\n beforeUnmount () {\r\n if (!isBrowser) return\r\n\r\n this.pauseAutoplay()\r\n\r\n if (this.autoplayHoverPause) {\r\n this.$el.removeEventListener('mouseenter', this.pauseAutoplay)\r\n this.$el.removeEventListener('mouseleave', this.startAutoplay)\r\n }\r\n },\r\n methods: {\r\n pauseAutoplay () {\r\n if (this.autoplayInterval) {\r\n clearInterval(this.autoplayInterval)\r\n this.autoplayInterval = null\r\n }\r\n },\r\n startAutoplay () {\r\n this.pauseAutoplay()\r\n\r\n if (this.autoplay) {\r\n this.autoplayInterval = setInterval(() => {\r\n this.dir === 'ltr' ? this.goPrev() : this.goNext()\r\n }, this.autoplayTimeout)\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default autoplay\r\n","<template>\r\n <div class=\"carousel-3d-controls\">\r\n <button type=\"button\" class=\"prev\" @click=\"parent.goPrev()\"\r\n :class=\"{ disabled: !parent.isPrevPossible }\"\r\n :disabled=\"!parent.isPrevPossible\"\r\n :style=\"`width: ${width}px; height: ${height}px; line-height: ${height}px;`\"\r\n aria-label=\"Previous slide\">\r\n <slot name=\"prev\" :go-prev=\"parent.goPrev\" :disabled=\"!parent.isPrevPossible\">\r\n <span v-html=\"prevHtml\"></span>\r\n </slot>\r\n </button>\r\n <button type=\"button\" class=\"next\" @click=\"parent.goNext()\"\r\n :class=\"{ disabled: !parent.isNextPossible }\"\r\n :disabled=\"!parent.isNextPossible\"\r\n :style=\"`width: ${width}px; height: ${height}px; line-height: ${height}px;`\"\r\n aria-label=\"Next slide\">\r\n <slot name=\"next\" :go-next=\"parent.goNext\" :disabled=\"!parent.isNextPossible\">\r\n <span v-html=\"nextHtml\"></span>\r\n </slot>\r\n </button>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'controls',\r\n props: {\r\n /**\r\n * Width in pixels of the navigation buttons\r\n */\r\n width: {\r\n type: [String, Number],\r\n default: 50\r\n },\r\n /**\r\n * Height in pixels of the navigation buttons\r\n */\r\n height: {\r\n type: [String, Number],\r\n default: 60\r\n },\r\n /**\r\n * Text content of the navigation prev button\r\n */\r\n prevHtml: {\r\n type: String,\r\n default: '&lsaquo;'\r\n },\r\n /**\r\n * Text content of the navigation next button\r\n */\r\n nextHtml: {\r\n type: String,\r\n default: '&rsaquo;'\r\n }\r\n },\r\n inject: ['carousel'],\r\n computed: {\r\n parent () {\r\n return this.carousel\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.carousel-3d-controls {\r\n position: absolute;\r\n top: 50%;\r\n height: 0;\r\n margin-top: -30px;\r\n left: 0;\r\n width: 100%;\r\n z-index: 1000;\r\n}\r\n\r\n.next, .prev {\r\n padding: 0;\r\n border: 0;\r\n background: transparent;\r\n width: 60px;\r\n position: absolute;\r\n z-index: 1010;\r\n font-size: 60px;\r\n height: 60px;\r\n line-height: 60px;\r\n color: #333;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n text-decoration: none;\r\n top: 0;\r\n}\r\n\r\n.next:hover, .prev:hover {\r\n cursor: pointer;\r\n opacity: 0.7;\r\n}\r\n\r\n.prev {\r\n left: 10px;\r\n text-align: left;\r\n}\r\n\r\n.next {\r\n right: 10px;\r\n text-align: right;\r\n}\r\n\r\n.disabled {\r\n opacity: 0.2;\r\n cursor: default;\r\n}\r\n\r\n.disabled:hover {\r\n cursor: default;\r\n opacity: 0.2;\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"carousel-3d-dots\" :class=\"`carousel-3d-dots--${position}`\" role=\"group\"\r\n :aria-label=\"`Slide navigation (${total} slides)`\">\r\n <button\r\n v-for=\"i in total\"\r\n :key=\"i\"\r\n type=\"button\"\r\n class=\"carousel-3d-dot\"\r\n :class=\"{ 'is-active': i - 1 === currentIndex }\"\r\n :aria-label=\"`Go to slide ${i} of ${total}`\"\r\n :aria-current=\"i - 1 === currentIndex ? 'true' : undefined\"\r\n @click=\"parent.goSlide(i - 1)\"\r\n ></button>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'carousel-3d-dots',\r\n props: {\r\n position: {\r\n type: String,\r\n default: 'bottom'\r\n }\r\n },\r\n inject: ['carousel'],\r\n computed: {\r\n parent () {\r\n return this.carousel\r\n },\r\n total () {\r\n return this.parent.total\r\n },\r\n currentIndex () {\r\n return this.parent.currentIndex\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.carousel-3d-dots {\r\n position: absolute;\r\n left: 0;\r\n width: 100%;\r\n display: flex;\r\n justify-content: center;\r\n gap: 8px;\r\n z-index: 900;\r\n pointer-events: none;\r\n}\r\n\r\n.carousel-3d-dots--bottom {\r\n bottom: 14px;\r\n}\r\n\r\n.carousel-3d-dots--top {\r\n top: 14px;\r\n}\r\n\r\n.carousel-3d-dot {\r\n pointer-events: auto;\r\n width: 10px;\r\n height: 10px;\r\n padding: 0;\r\n border: 0;\r\n border-radius: 50%;\r\n background: rgba(0, 0, 0, 0.35);\r\n cursor: pointer;\r\n transition: background-color 200ms ease;\r\n}\r\n\r\n.carousel-3d-dot:hover {\r\n background: rgba(0, 0, 0, 0.55);\r\n}\r\n\r\n.carousel-3d-dot.is-active {\r\n background: rgba(0, 0, 0, 0.85);\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"carousel-3d-container\" :style=\"{height: slideHeight + 'px'}\"\r\n role=\"region\" aria-roledescription=\"carousel\" :aria-label=\"ariaLabel\"\r\n tabindex=\"0\" @keydown.left.prevent=\"goPrev\" @keydown.right.prevent=\"goNext\">\r\n <div class=\"carousel-3d-slider\" :style=\"{width: slideWidth + 'px', height: slideHeight + 'px'}\">\r\n <slot></slot>\r\n </div>\r\n <controls v-if=\"controlsVisible\" :next-html=\"controlsNextHtml\" :prev-html=\"controlsPrevHtml\"\r\n :width=\"controlsWidth\" :height=\"controlsHeight\">\r\n <template #prev=\"slotProps\">\r\n <slot name=\"prev\" v-bind=\"slotProps\"></slot>\r\n </template>\r\n <template #next=\"slotProps\">\r\n <slot name=\"next\" v-bind=\"slotProps\"></slot>\r\n </template>\r\n </controls>\r\n <dots v-if=\"dots\" :position=\"dotsPosition\"></dots>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { Comment, Fragment, Text } from 'vue'\r\nimport {\r\n getOutIndex,\r\n getSafeIndex,\r\n getSideIndices,\r\n getStartIndex,\r\n getVisibleSlideCount\r\n} from '@/carousel-3d/core/carousel.js'\r\nimport autoplay from '@/carousel-3d/mixins/autoplay.js'\r\nimport Controls from '@/carousel-3d/Controls.vue'\r\nimport Dots from '@/carousel-3d/Dots.vue'\r\n\r\nconst isBrowser = typeof window !== 'undefined'\r\n\r\nconst noop = () => {\r\n}\r\n\r\nfunction countSlides (nodes) {\r\n return nodes.reduce((count, node) => {\r\n if (node.type === Fragment && Array.isArray(node.children)) {\r\n return count + countSlides(node.children)\r\n }\r\n\r\n return node.type === Comment || node.type === Text ? count : count + 1\r\n }, 0)\r\n}\r\n\r\nexport default {\r\n name: 'carousel3d',\r\n components: {\r\n Controls,\r\n Dots\r\n },\r\n emits: ['after-slide-change', 'before-slide-change', 'last-slide'],\r\n provide () {\r\n return {\r\n carousel: this\r\n }\r\n },\r\n props: {\r\n count: {\r\n type: [Number, String],\r\n default: 0\r\n },\r\n perspective: {\r\n type: [Number, String],\r\n default: 35\r\n },\r\n display: {\r\n type: [Number, String],\r\n default: 5\r\n },\r\n loop: {\r\n type: Boolean,\r\n default: true\r\n },\r\n animationSpeed: {\r\n type: [Number, String],\r\n default: 500\r\n },\r\n dir: {\r\n type: String,\r\n default: 'rtl'\r\n },\r\n width: {\r\n type: [Number, String],\r\n default: 360\r\n },\r\n height: {\r\n type: [Number, String],\r\n default: 270\r\n },\r\n border: {\r\n type: [Number, String],\r\n default: 1\r\n },\r\n space: {\r\n type: [Number, String],\r\n default: 'auto'\r\n },\r\n startIndex: {\r\n type: [Number, String],\r\n default: 0\r\n },\r\n clickable: {\r\n type: Boolean,\r\n default: true\r\n },\r\n disable3d: {\r\n type: Boolean,\r\n default: false\r\n },\r\n minSwipeDistance: {\r\n type: Number,\r\n default: 10\r\n },\r\n inverseScaling: {\r\n type: [Number, String],\r\n default: 300\r\n },\r\n controlsVisible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n controlsPrevHtml: {\r\n type: String,\r\n default: '&lsaquo;'\r\n },\r\n controlsNextHtml: {\r\n type: String,\r\n default: '&rsaquo;'\r\n },\r\n controlsWidth: {\r\n type: [String, Number],\r\n default: 50\r\n },\r\n controlsHeight: {\r\n type: [String, Number],\r\n default: 50\r\n },\r\n dots: {\r\n type: Boolean,\r\n default: false\r\n },\r\n dotsPosition: {\r\n type: String,\r\n default: 'bottom'\r\n },\r\n horizonOffset: {\r\n type: [Number, String],\r\n default: 0\r\n },\r\n lazy: {\r\n type: Boolean,\r\n default: false\r\n },\r\n beforeSlideChange: {\r\n type: Function,\r\n default: noop\r\n },\r\n onLastSlide: {\r\n type: Function,\r\n default: noop\r\n },\r\n onSlideChange: {\r\n type: Function,\r\n default: noop\r\n },\r\n bias: {\r\n type: String,\r\n default: 'left'\r\n },\r\n onMainSlideClick: {\r\n type: Function,\r\n default: noop\r\n },\r\n oneDirectional: {\r\n type: Boolean,\r\n default: false\r\n },\r\n ariaLabel: {\r\n type: String,\r\n default: '3D carousel'\r\n }\r\n },\r\n data () {\r\n return {\r\n viewport: 0,\r\n currentIndex: 0,\r\n total: 0,\r\n dragOffsetX: 0,\r\n dragStartX: 0,\r\n dragOffsetY: 0,\r\n dragStartY: 0,\r\n mousedown: false,\r\n zIndex: 998,\r\n animationTimer: null,\r\n navigationTimers: []\r\n }\r\n },\r\n mixins: [\r\n autoplay\r\n ],\r\n watch: {\r\n count () {\r\n this.computeData()\r\n }\r\n },\r\n created () {\r\n this.computeSlideData(true)\r\n },\r\n computed: {\r\n isLastSlide () {\r\n return this.currentIndex === this.total - 1\r\n },\r\n isFirstSlide () {\r\n return this.currentIndex === 0\r\n },\r\n isNextPossible () {\r\n return this.total > 0 && !(!this.loop && this.isLastSlide)\r\n },\r\n isPrevPossible () {\r\n return this.total > 0 && !(!this.loop && this.isFirstSlide)\r\n },\r\n slideWidth () {\r\n const vw = this.viewport\r\n const sw = parseInt(this.width) + (parseInt(this.border, 10) * 2)\r\n\r\n return vw > 0 && vw < sw && isBrowser ? vw : sw\r\n },\r\n slideHeight () {\r\n const sw = parseInt(this.width, 10) + (parseInt(this.border, 10) * 2)\r\n const sh = parseInt(parseInt(this.height) + (this.border * 2), 10)\r\n const ar = this.calculateAspectRatio(sw, sh)\r\n\r\n return this.slideWidth / ar\r\n },\r\n visible () {\r\n return getVisibleSlideCount(this.display, this.total)\r\n },\r\n hasHiddenSlides () {\r\n return this.total > this.visible\r\n },\r\n leftIndices () {\r\n return getSideIndices({\r\n currentIndex: this.currentIndex,\r\n total: this.total,\r\n visible: this.visible,\r\n bias: this.bias,\r\n dir: this.dir,\r\n side: 'left'\r\n })\r\n },\r\n rightIndices () {\r\n return getSideIndices({\r\n currentIndex: this.currentIndex,\r\n total: this.total,\r\n visible: this.visible,\r\n bias: this.bias,\r\n dir: this.dir,\r\n side: 'right'\r\n })\r\n },\r\n leftOutIndex () {\r\n return getOutIndex({\r\n currentIndex: this.currentIndex,\r\n total: this.total,\r\n visible: this.visible,\r\n bias: this.bias,\r\n dir: this.dir,\r\n side: 'left'\r\n })\r\n },\r\n rightOutIndex () {\r\n return getOutIndex({\r\n currentIndex: this.currentIndex,\r\n total: this.total,\r\n visible: this.visible,\r\n bias: this.bias,\r\n dir: this.dir,\r\n side: 'right'\r\n })\r\n }\r\n },\r\n methods: {\r\n /**\r\n * Go to next slide\r\n */\r\n goNext () {\r\n if (this.total > 0 && this.isNextPossible) {\r\n this.isLastSlide ? this.goSlide(0) : this.goSlide(this.currentIndex + 1)\r\n }\r\n },\r\n /**\r\n * Go to previous slide\r\n */\r\n goPrev () {\r\n if (this.total > 0 && this.isPrevPossible) {\r\n this.isFirstSlide ? this.goSlide(this.total - 1) : this.goSlide(this.currentIndex - 1)\r\n }\r\n },\r\n /**\r\n * Go to slide\r\n * @param {String} index of slide where to go\r\n */\r\n goSlide (index) {\r\n if (this.total <= 0) return\r\n\r\n const targetIndex = getSafeIndex(index, this.total)\r\n\r\n if (this.beforeSlideChange !== noop && this.beforeSlideChange(targetIndex, this.currentIndex) === false) {\r\n return\r\n }\r\n\r\n this.currentIndex = targetIndex\r\n\r\n if (this.isLastSlide) {\r\n if (this.onLastSlide !== noop) {\r\n console.warn('onLastSlide deprecated, please use @last-slide')\r\n }\r\n this.onLastSlide(this.currentIndex)\r\n\r\n this.$emit('last-slide', this.currentIndex)\r\n }\r\n\r\n this.$emit('before-slide-change', this.currentIndex)\r\n\r\n clearTimeout(this.animationTimer)\r\n this.animationTimer = setTimeout(() => {\r\n this.animationTimer = null\r\n this.animationEnd()\r\n }, parseInt(this.animationSpeed, 10))\r\n },\r\n /**\r\n * Go to slide far slide\r\n */\r\n goFar (index) {\r\n this.clearNavigationTimers()\r\n\r\n let diff = (index === this.total - 1 && this.isFirstSlide) ? -1 : (index - this.currentIndex)\r\n\r\n if (this.isLastSlide && index === 0) {\r\n diff = 1\r\n }\r\n\r\n const diff2 = (diff < 0) ? -diff : diff\r\n let timeBuff = 0\r\n let i = 0\r\n\r\n while (i < diff2) {\r\n i += 1\r\n const timeout = (diff2 === 1) ? 0 : (timeBuff)\r\n\r\n const timer = setTimeout(() => {\r\n diff < 0 ? this.goPrev() : this.goNext()\r\n }, timeout)\r\n this.navigationTimers.push(timer)\r\n\r\n timeBuff += (this.animationSpeed / (diff2))\r\n }\r\n },\r\n clearNavigationTimers () {\r\n this.navigationTimers.forEach((timer) => clearTimeout(timer))\r\n this.navigationTimers = []\r\n },\r\n /**\r\n * Trigger actions when animation ends\r\n */\r\n animationEnd () {\r\n if (this.onSlideChange !== noop) {\r\n console.warn('onSlideChange deprecated, please use @after-slide-change')\r\n }\r\n this.onSlideChange(this.currentIndex)\r\n\r\n this.$emit('after-slide-change', this.currentIndex)\r\n },\r\n /**\r\n * Trigger actions when mouse is released\r\n * @param {Object} e The event object\r\n */\r\n handleMouseup () {\r\n this.mousedown = false\r\n this.dragOffsetX = 0\r\n this.dragOffsetY = 0\r\n },\r\n /**\r\n * Trigger actions when mouse is pressed\r\n * @param {Object} e The event object\r\n */\r\n handleMousedown (e) {\r\n if (!e.touches && e.cancelable) {\r\n e.preventDefault()\r\n }\r\n\r\n const point = this.getEventPoint(e)\r\n if (!point) return\r\n\r\n this.mousedown = true\r\n this.dragStartX = point.clientX\r\n this.dragStartY = point.clientY\r\n },\r\n /**\r\n * Trigger actions when mouse is pressed and then moved (mouse drag)\r\n * @param {Object} e The event object\r\n */\r\n handleMousemove (e) {\r\n if (!this.mousedown) {\r\n return\r\n }\r\n\r\n const point = this.getEventPoint(e)\r\n if (!point) return\r\n\r\n const eventPosX = point.clientX\r\n const eventPosY = point.clientY\r\n const deltaX = (this.dragStartX - eventPosX)\r\n const deltaY = (this.dragStartY - eventPosY)\r\n\r\n this.dragOffsetX = deltaX\r\n this.dragOffsetY = deltaY\r\n\r\n // If the swipe is more significant on the Y axis, do not move the slides because this is a scroll gesture\r\n if (Math.abs(this.dragOffsetY) > Math.abs(this.dragOffsetX)) {\r\n return\r\n }\r\n\r\n if (this.dragOffsetX > this.minSwipeDistance) {\r\n this.handleMouseup()\r\n this.goNext()\r\n } else if (this.dragOffsetX < -this.minSwipeDistance) {\r\n this.handleMouseup()\r\n this.goPrev()\r\n }\r\n },\r\n getEventPoint (e) {\r\n return (e.touches && e.touches[0]) || (e.changedTouches && e.changedTouches[0]) || e\r\n },\r\n addInteractionListeners () {\r\n if (window.PointerEvent) {\r\n this.$el.addEventListener('pointerdown', this.handleMousedown)\r\n this.$el.addEventListener('pointerup', this.handleMouseup)\r\n this.$el.addEventListener('pointercancel', this.handleMouseup)\r\n this.$el.addEventListener('pointerleave', this.handleMouseup)\r\n this.$el.addEventListener('pointermove', this.handleMousemove)\r\n return\r\n }\r\n\r\n this.$el.addEventListener('touchstart', this.handleMousedown)\r\n this.$el.addEventListener('touchend', this.handleMouseup)\r\n this.$el.addEventListener('touchcancel', this.handleMouseup)\r\n this.$el.addEventListener('touchmove', this.handleMousemove)\r\n this.$el.addEventListener('mousedown', this.handleMousedown)\r\n this.$el.addEventListener('mouseup', this.handleMouseup)\r\n this.$el.addEventListener('mouseleave', this.handleMouseup)\r\n this.$el.addEventListener('mousemove', this.handleMousemove)\r\n },\r\n removeInteractionListeners () {\r\n if (window.PointerEvent) {\r\n this.$el.removeEventListener('pointerdown', this.handleMousedown)\r\n this.$el.removeEventListener('pointerup', this.handleMouseup)\r\n this.$el.removeEventListener('pointercancel', this.handleMouseup)\r\n this.$el.removeEventListener('pointerleave', this.handleMouseup)\r\n this.$el.removeEventListener('pointermove', this.handleMousemove)\r\n return\r\n }\r\n\r\n this.$el.removeEventListener('touchstart', this.handleMousedown)\r\n this.$el.removeEventListener('touchend', this.handleMouseup)\r\n this.$el.removeEventListener('touchcancel', this.handleMouseup)\r\n this.$el.removeEventListener('touchmove', this.handleMousemove)\r\n this.$el.removeEventListener('mousedown', this.handleMousedown)\r\n this.$el.removeEventListener('mouseup', this.handleMouseup)\r\n this.$el.removeEventListener('mouseleave', this.handleMouseup)\r\n this.$el.removeEventListener('mousemove', this.handleMousemove)\r\n },\r\n /**\r\n * A mutation observer is used to detect changes to the containing node\r\n * in order to keep the magnet container in sync with the height its reference node.\r\n */\r\n attachMutationObserver () {\r\n const MutationObserver = window.MutationObserver ||\r\n window.WebKitMutationObserver ||\r\n window.MozMutationObserver\r\n\r\n if (MutationObserver) {\r\n const config = {\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n }\r\n\r\n this.mutationObserver = new MutationObserver(() => {\r\n this.$nextTick(() => {\r\n this.computeData()\r\n })\r\n })\r\n\r\n if (this.$el) {\r\n this.mutationObserver.observe(this.$el, config)\r\n }\r\n }\r\n },\r\n\r\n detachMutationObserver () {\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect()\r\n }\r\n },\r\n /**\r\n * Get the number of slides\r\n * @return {Number} Number of slides\r\n */\r\n getSlideCount () {\r\n const defaultSlot = this.$slots.default\r\n if (!defaultSlot) return 0\r\n\r\n return countSlides(defaultSlot())\r\n },\r\n /**\r\n * Calculate slide with and keep defined aspect ratio\r\n * @return {Number} Aspect ratio number\r\n */\r\n calculateAspectRatio (width, height) {\r\n return Math.min(width / height)\r\n },\r\n /**\r\n * Re-compute the number of slides and current slide\r\n */\r\n computeSlideData (firstRun) {\r\n this.total = this.getSlideCount()\r\n if (this.total === 0) {\r\n this.currentIndex = 0\r\n return\r\n }\r\n\r\n if (firstRun || this.currentIndex >= this.total) {\r\n this.currentIndex = getStartIndex(this.startIndex, this.total)\r\n }\r\n },\r\n computeData (firstRun) {\r\n this.computeSlideData(firstRun)\r\n\r\n this.viewport = this.$el.clientWidth\r\n },\r\n setSize () {\r\n this.viewport = this.$el.clientWidth\r\n this.$el.style.height = this.slideHeight + 'px'\r\n const slider = this.$el.querySelector('.carousel-3d-slider')\r\n if (slider) {\r\n slider.style.width = this.slideWidth + 'px'\r\n slider.style.height = this.slideHeight + 'px'\r\n }\r\n }\r\n },\r\n\r\n mounted () {\r\n if (isBrowser) {\r\n this.computeData(true)\r\n this.attachMutationObserver()\r\n window.addEventListener('resize', this.setSize)\r\n\r\n this.addInteractionListeners()\r\n }\r\n },\r\n\r\n beforeUnmount () {\r\n if (isBrowser) {\r\n this.detachMutationObserver()\r\n this.removeInteractionListeners()\r\n window.removeEventListener('resize', this.setSize)\r\n }\r\n\r\n clearTimeout(this.animationTimer)\r\n this.clearNavigationTimers()\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.carousel-3d-container {\r\n min-height: 1px;\r\n width: 100%;\r\n position: relative;\r\n z-index: 0;\r\n overflow: hidden;\r\n touch-action: pan-y;\r\n margin: 20px auto;\r\n box-sizing: border-box;\r\n}\r\n\r\n.carousel-3d-slider {\r\n position: relative;\r\n margin: 0 auto;\r\n transform-style: preserve-3d;\r\n -webkit-perspective: 1000px;\r\n -moz-perspective: 1000px;\r\n perspective: 1000px;\r\n}\r\n\r\n</style>\r\n","import Slide from '@/carousel-3d/Slide.vue'\r\nimport Carousel3d from '@/carousel-3d/Carousel3d.vue'\r\n\r\nconst install = (app) => {\r\n app.component('carousel3d', Carousel3d)\r\n app.component('slide', Slide)\r\n}\r\n\r\nexport default {\r\n install\r\n}\r\n\r\nexport {\r\n Carousel3d,\r\n Slide\r\n}\r\n"],"mappings":"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"}