element-plus
Version:
A Component Library for Vue 3
1 lines • 16.7 kB
Source Map (JSON)
{"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 getCurrentInstance,\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, useOrderedChildren } 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\nconst {\n children: items,\n addChild: addItem,\n removeChild: removeItem,\n} = useOrderedChildren<CarouselItemContext>(\n getCurrentInstance()!,\n 'ElCarouselItem'\n)\n\n// refs\nconst activeIndex = ref(-1)\nconst timer = ref<ReturnType<typeof setInterval> | null>(null)\nconst hover = ref(false)\nconst root = ref<HTMLDivElement>()\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 resetTimer()\n}\n\nfunction resetItemPosition(oldIndex?: number) {\n items.value.forEach((item, index) => {\n item.translateItem(index, activeIndex.value, oldIndex)\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\nfunction resetTimer() {\n pauseTimer()\n startTimer()\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\nwatch(\n () => props.interval,\n () => {\n resetTimer()\n }\n)\n\nwatch(\n () => items.value,\n () => {\n if (items.value.length > 0) setActiveItem(props.initialIndex)\n }\n)\n\nconst resizeObserver = shallowRef<ReturnType<typeof useResizeObserver>>()\n// lifecycle\nonMounted(() => {\n resizeObserver.value = useResizeObserver(root.value, () => {\n resetItemPosition()\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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"}