UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 16.8 kB
{"version":3,"file":"carousel2.mjs","sources":["../../../../../../packages/components/carousel/src/carousel.vue"],"sourcesContent":["<template>\n <div\n ref=\"root\"\n :class=\"carouselClasses\"\n @mouseenter.stop=\"handleMouseEnter\"\n @mouseleave.stop=\"handleMouseLeave\"\n >\n <div :class=\"ns.e('container')\" :style=\"{ height: height }\">\n <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-left\">\n <button\n v-show=\"\n (arrow === 'always' || hover) && (props.loop || activeIndex > 0)\n \"\n type=\"button\"\n :class=\"[ns.e('arrow'), ns.em('arrow', 'left')]\"\n @mouseenter=\"handleButtonEnter('left')\"\n @mouseleave=\"handleButtonLeave\"\n @click.stop=\"throttledArrowClick(activeIndex - 1)\"\n >\n <ElIcon>\n <ArrowLeft />\n </ElIcon>\n </button>\n </transition>\n <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-right\">\n <button\n v-show=\"\n (arrow === 'always' || hover) &&\n (props.loop || activeIndex < items.length - 1)\n \"\n type=\"button\"\n :class=\"[ns.e('arrow'), ns.em('arrow', 'right')]\"\n @mouseenter=\"handleButtonEnter('right')\"\n @mouseleave=\"handleButtonLeave\"\n @click.stop=\"throttledArrowClick(activeIndex + 1)\"\n >\n <ElIcon>\n <ArrowRight />\n </ElIcon>\n </button>\n </transition>\n <slot />\n </div>\n <ul v-if=\"indicatorPosition !== 'none'\" :class=\"indicatorsClasses\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :class=\"[\n ns.e('indicator'),\n ns.em('indicator', direction),\n ns.is('active', index === activeIndex),\n ]\"\n @mouseenter=\"throttledIndicatorHover(index)\"\n @click.stop=\"handleIndicatorClick(index)\"\n >\n <button :class=\"ns.e('button')\">\n <span v-if=\"hasLabel\">{{ item.props.label }}</span>\n </button>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n computed,\n nextTick,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n shallowRef,\n unref,\n watch,\n} from 'vue'\nimport { throttle } from 'lodash-unified'\nimport { useResizeObserver } from '@vueuse/core'\nimport { debugWarn, isString } from '@element-plus/utils'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { carouselContextKey } from '@element-plus/tokens'\nimport { carouselEmits, carouselProps } from './carousel'\nimport type { CarouselItemContext } from '@element-plus/tokens'\n\ndefineOptions({\n name: 'ElCarousel',\n})\n\nconst props = defineProps(carouselProps)\nconst emit = defineEmits(carouselEmits)\nconst ns = useNamespace('carousel')\nconst COMPONENT_NAME = 'ElCarousel'\nconst THROTTLE_TIME = 300\n\n// refs\nconst activeIndex = ref(-1)\nconst timer = ref<ReturnType<typeof setInterval> | null>(null)\nconst hover = ref(false)\nconst root = ref<HTMLDivElement>()\nconst items = ref<Array<CarouselItemContext>>([])\n\n// computed\nconst arrowDisplay = computed(\n () => props.arrow !== 'never' && !unref(isVertical)\n)\n\nconst hasLabel = computed(() => {\n return items.value.some((item) => item.props.label.toString().length > 0)\n})\n\nconst carouselClasses = computed(() => {\n const classes = [ns.b(), ns.m(props.direction)]\n if (unref(isCardType)) {\n classes.push(ns.m('card'))\n }\n return classes\n})\n\nconst indicatorsClasses = computed(() => {\n const classes = [ns.e('indicators'), ns.em('indicators', props.direction)]\n if (hasLabel.value) {\n classes.push(ns.em('indicators', 'labels'))\n }\n if (props.indicatorPosition === 'outside' || unref(isCardType)) {\n classes.push(ns.em('indicators', 'outside'))\n }\n return classes\n})\n\nconst isCardType = computed(() => props.type === 'card')\nconst isVertical = computed(() => props.direction === 'vertical')\n\n// methods\nconst throttledArrowClick = throttle(\n (index: number) => {\n setActiveItem(index)\n },\n THROTTLE_TIME,\n { trailing: true }\n)\n\nconst throttledIndicatorHover = throttle((index: number) => {\n handleIndicatorHover(index)\n}, THROTTLE_TIME)\n\nfunction pauseTimer() {\n if (timer.value) {\n clearInterval(timer.value)\n timer.value = null\n }\n}\n\nfunction startTimer() {\n if (props.interval <= 0 || !props.autoplay || timer.value) return\n timer.value = setInterval(() => playSlides(), props.interval)\n}\n\nconst playSlides = () => {\n if (activeIndex.value < items.value.length - 1) {\n activeIndex.value = activeIndex.value + 1\n } else if (props.loop) {\n activeIndex.value = 0\n }\n}\n\nfunction setActiveItem(index: number | string) {\n if (isString(index)) {\n const filteredItems = items.value.filter(\n (item) => item.props.name === index\n )\n if (filteredItems.length > 0) {\n index = items.value.indexOf(filteredItems[0])\n }\n }\n index = Number(index)\n if (Number.isNaN(index) || index !== Math.floor(index)) {\n debugWarn(COMPONENT_NAME, 'index must be integer.')\n return\n }\n const itemCount = items.value.length\n const oldIndex = activeIndex.value\n if (index < 0) {\n activeIndex.value = props.loop ? itemCount - 1 : 0\n } else if (index >= itemCount) {\n activeIndex.value = props.loop ? 0 : itemCount - 1\n } else {\n activeIndex.value = index\n }\n if (oldIndex === activeIndex.value) {\n resetItemPosition(oldIndex)\n }\n}\n\nfunction resetItemPosition(oldIndex?: number) {\n items.value.forEach((item, index) => {\n item.translateItem(index, activeIndex.value, oldIndex)\n })\n}\n\nfunction addItem(item: CarouselItemContext) {\n items.value.push(item)\n}\n\nfunction removeItem(uid?: number) {\n const index = items.value.findIndex((item) => item.uid === uid)\n if (index !== -1) {\n items.value.splice(index, 1)\n if (activeIndex.value === index) next()\n }\n}\n\nfunction itemInStage(item: CarouselItemContext, index: number) {\n const _items = unref(items)\n const itemCount = _items.length\n if (itemCount === 0 || !item.states.inStage) return false\n const nextItemIndex = index + 1\n const prevItemIndex = index - 1\n const lastItemIndex = itemCount - 1\n const isLastItemActive = _items[lastItemIndex].states.active\n const isFirstItemActive = _items[0].states.active\n const isNextItemActive = _items[nextItemIndex]?.states?.active\n const isPrevItemActive = _items[prevItemIndex]?.states?.active\n\n if ((index === lastItemIndex && isFirstItemActive) || isNextItemActive) {\n return 'left'\n } else if ((index === 0 && isLastItemActive) || isPrevItemActive) {\n return 'right'\n }\n return false\n}\n\nfunction handleMouseEnter() {\n hover.value = true\n if (props.pauseOnHover) {\n pauseTimer()\n }\n}\n\nfunction handleMouseLeave() {\n hover.value = false\n startTimer()\n}\n\nfunction handleButtonEnter(arrow: 'left' | 'right') {\n if (unref(isVertical)) return\n items.value.forEach((item, index) => {\n if (arrow === itemInStage(item, index)) {\n item.states.hover = true\n }\n })\n}\n\nfunction handleButtonLeave() {\n if (unref(isVertical)) return\n items.value.forEach((item) => {\n item.states.hover = false\n })\n}\n\nfunction handleIndicatorClick(index: number) {\n activeIndex.value = index\n}\n\nfunction handleIndicatorHover(index: number) {\n if (props.trigger === 'hover' && index !== activeIndex.value) {\n activeIndex.value = index\n }\n}\n\nfunction prev() {\n setActiveItem(activeIndex.value - 1)\n}\n\nfunction next() {\n setActiveItem(activeIndex.value + 1)\n}\n\n// watch\nwatch(\n () => activeIndex.value,\n (current, prev) => {\n resetItemPosition(prev)\n if (prev > -1) {\n emit('change', current, prev)\n }\n }\n)\nwatch(\n () => props.autoplay,\n (autoplay) => {\n autoplay ? startTimer() : pauseTimer()\n }\n)\nwatch(\n () => props.loop,\n () => {\n setActiveItem(activeIndex.value)\n }\n)\n\nconst resizeObserver = shallowRef<ReturnType<typeof useResizeObserver>>()\n// lifecycle\nonMounted(async () => {\n await nextTick()\n\n resizeObserver.value = useResizeObserver(root.value, () => {\n resetItemPosition()\n })\n if (props.initialIndex < items.value.length && props.initialIndex >= 0) {\n activeIndex.value = props.initialIndex\n }\n startTimer()\n})\n\nonBeforeUnmount(() => {\n pauseTimer()\n if (root.value && resizeObserver.value) resizeObserver.value.stop()\n})\n\n// provide\nprovide(carouselContextKey, {\n root,\n isCardType,\n isVertical,\n items,\n loop: props.loop,\n addItem,\n removeItem,\n setActiveItem,\n})\n\ndefineExpose({\n /** @description manually switch slide */\n setActiveItem,\n /** @description switch to the previous slide */\n prev,\n /** @description switch to the next slide */\n next,\n})\n</script>\n"],"names":[],"mappings":"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"}