hongluan-ui
Version:
Hongluan Component Library for Vue 3
1 lines • 20.2 kB
Source Map (JSON)
{"version":3,"file":"carousel.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=\"carousel-container\" :style=\"{ height: height, width: showMultiple ? containerWidth : ''}\">\n <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-left\">\n <button\n v-show=\"(arrow === 'always' || data.hover) && (props.loop || data.activeIndex > 0)\"\n type=\"button\"\n class=\"carousel-arrow left\"\n :aria-label=\"t('hl.carousel.leftArrow')\"\n @mouseenter=\"handleButtonEnter('left')\"\n @mouseleave=\"handleButtonLeave\"\n @click.stop=\"throttledArrowClick(data.activeIndex - 1, 'previous')\"\n >\n <hl-icon>\n <system-arrow-left />\n </hl-icon>\n </button>\n </transition>\n <transition v-if=\"arrowDisplay\" name=\"carousel-arrow-right\">\n <button\n v-show=\"(arrow === 'always' || data.hover) && (props.loop || data.activeIndex < items.length - 1)\"\n type=\"button\"\n class=\"carousel-arrow right\"\n :aria-label=\"t('hl.carousel.rightArrow')\"\n @mouseenter=\"handleButtonEnter('right')\"\n @mouseleave=\"handleButtonLeave\"\n @click.stop=\"throttledArrowClick(data.activeIndex + 1, 'next')\"\n >\n <hl-icon>\n <system-arrow-right />\n </hl-icon>\n </button>\n </transition>\n <slot></slot>\n </div>\n <div v-if=\"indicatorPosition !== 'none' && !showMultiple\" :class=\"indicatorsClasses\">\n <template v-if=\"indicatorType !== 'custom'\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :class=\"[\n 'carousel-indicator',\n 'carousel-indicator-' + direction,\n {'is-active': index === data.activeIndex },\n ]\"\n @mouseenter=\"throttledIndicatorHover(index)\"\n @click.stop=\"handleIndicatorClick(index)\"\n >\n <button\n :class=\"indicatorsButtonClasses\"\n :aria-label=\"t('hl.carousel.indicator', { index: index + 1 })\"\n >\n <span v-if=\"hasLabel\">{{ item.props.label }}</span>\n </button>\n </div>\n </template>\n <slot name=\"indicator\"></slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport {\n defineComponent,\n reactive,\n computed,\n ref,\n provide,\n onMounted,\n onBeforeUnmount,\n watch,\n toRef,\n shallowRef,\n getCurrentInstance,\n} from 'vue'\nimport { throttle } from 'lodash-unified'\nimport { useResizeObserver } from '@vueuse/core'\nimport { useNamespace, useLocale, useOrderedChildren } from '@hongluan-ui/hooks'\nimport { debugWarn } from '@hongluan-ui/utils/error'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemArrowLeft,SystemArrowRight } from '@hongluan-ui/components/system-icon'\nimport { carouselContextKey, carouselIndicatorContextKey } from '@hongluan-ui/tokens'\nimport { carouselProps } from './carousel'\n\nimport type { CarouselItemContext } from '@hongluan-ui/tokens'\n\nexport default defineComponent({\n name: 'Carousel',\n components: {\n HlIcon,\n SystemArrowLeft,\n SystemArrowRight,\n },\n props: carouselProps,\n emits: ['change'],\n setup(props, { emit }) {\n const { t } = useLocale()\n const { namespace } = useNamespace('carousel')\n const {\n children: items,\n addChild,\n removeChild: removeItem,\n } = useOrderedChildren<CarouselItemContext>(\n getCurrentInstance()!,\n 'CarouselItem',\n )\n\n // data\n const data = reactive<{\n activeIndex: number\n containerWidth: number\n timer: null | ReturnType<typeof setInterval>\n hover: boolean\n itemsIndexArray: Array<number>\n throttledArrowDirection: string\n itemsWidthUnit: string\n }>({\n activeIndex: -1,\n containerWidth: 0,\n timer: null,\n hover: false,\n itemsIndexArray :[],\n throttledArrowDirection: '',\n itemsWidthUnit: Number.isNaN(+props.itemsWidth) ? String(props.itemsWidth).replace(/[^a-zA-Z]/g,'') : 'px',//非数字获取单位\n })\n\n // refs\n const root = ref(null)\n\n // computed\n const arrowDisplay = computed(\n () => props.arrow !== 'never' && props.direction !== 'vertical',\n )\n // 可视区域是否显示多张\n const showMultiple = computed(() => {\n let state = props.itemsNumber !== 1 && props.direction === 'horizontal' && props.type !== 'card' && items.value.length - 2 >= props.itemsNumber ? true : false\n return state\n })\n // 计算itemsWidth\n const containerWidth = computed(() => {\n return props.itemsNumber * Number.parseFloat(String(props.itemsWidth)) + data.itemsWidthUnit\n })\n\n const hasLabel = computed(() => {\n return items.value.some(item => item.props.label.toString().length > 0)\n })\n\n const carouselClasses = computed(() => {\n const classes = [namespace.value, 'carousel-' + props.direction]\n if (props.type === 'card') {\n classes.push('carousel-card')\n }\n return classes\n })\n\n const indicatorsClasses = computed(() => {\n const classes = [\n 'carousel-indicators',\n 'carousel-indicators-' + props.direction,\n 'carousel-indicators-' + props.indicatorType,\n ]\n if (hasLabel.value) {\n classes.push('carousel-indicators-labels')\n }\n if (props.indicatorPosition === 'outside' || props.type === 'card') {\n classes.push('carousel-indicators-outside')\n }\n return classes\n })\n\n const indicatorsButtonClasses = computed(() => {\n const classes = props.indicatorType === 'line' ? 'carousel-button' : 'carousel-dot'\n return classes\n })\n\n // methods\n function getitemsIndexArray() {\n // 多张显示时,拼索引数组,用索引计算移动距离\n let array = []\n for(let i = 0 ;i < Number(items.value.length - 1 ); i++) {\n array.push(i)\n }\n array.push(-1)\n return showMultiple.value ? array : []\n }\n\n const throttledArrowClick = throttle(\n (index, direction) => {\n data.throttledArrowDirection = direction\n if (showMultiple.value){\n data.itemsIndexArray = data.itemsIndexArray.map(itx => {\n if (itx === items.value.length - 2 && direction === 'previous') itx = -2\n if (itx === -1 && direction === 'next') itx = items.value.length - 1\n direction === 'previous' ? itx += 1 : itx -= 1\n return itx\n })\n }\n setActiveItem(index)\n },\n 300,\n { trailing: true },\n )\n const throttledIndicatorHover = throttle(index => {\n handleIndicatorHover(index)\n }, 300)\n\n function pauseTimer() {\n if (data.timer) {\n clearInterval(data.timer)\n data.timer = null\n }\n }\n\n function startTimer() {\n if (props.interval <= 0 || !props.autoplay || data.timer) return\n data.timer = setInterval(() => playSlides(), props.interval)\n }\n\n const playSlides = () => {\n if (data.activeIndex < items.value.length - 1) {\n data.activeIndex = data.activeIndex + 1\n } else if (props.loop) {\n data.activeIndex = 0\n }\n showMultiple.value && throttledArrowClick(data.activeIndex + 1, 'next')\n }\n\n function setActiveItem(index: number | string) {\n if (typeof index === 'string') {\n const filteredItems = items.value.filter(item => item.props.name === index)\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('Carousel', 'index must be an integer.')\n return\n }\n let length = items.value.length\n const oldIndex = data.activeIndex\n if (index < 0) {\n data.activeIndex = props.loop ? length - 1 : 0\n } else if (index >= length) {\n data.activeIndex = props.loop ? 0 : length - 1\n } else {\n data.activeIndex = index\n }\n if (oldIndex === data.activeIndex) {\n resetItemPosition(oldIndex)\n }\n resetTimer()\n }\n\n function resetItemPosition(oldIndex?: number) {\n const itemWidth = Number.parseFloat(String(props.itemsWidth))\n items.value.forEach((item, index) => {\n let itemsDistance = showMultiple.value ? itemWidth * data.itemsIndexArray[index] : 0\n let isAnimating = data.throttledArrowDirection === 'next' ?\n data.itemsIndexArray[index] === props.itemsNumber + 1 ? false : true\n : itemWidth * data.itemsIndexArray[index] === -itemWidth ? false : true\n item.translateItem(index, data.activeIndex, oldIndex, itemsDistance ,isAnimating)\n })\n }\n\n function addItem(item: CarouselItemContext) {\n addChild(item)\n data.itemsIndexArray = getitemsIndexArray()\n }\n\n function itemInStage(item: CarouselItemContext, index: number) {\n const length = items.value.length\n if (\n (index === length - 1 && item.states.inStage && items.value[0].states.active) ||\n (item.states.inStage &&\n items.value[index + 1] &&\n items.value[index + 1].states.active)\n ) {\n return 'left'\n } else if (\n (index === 0 && item.states.inStage && items.value[length - 1].states.active) ||\n (item.states.inStage &&\n items.value[index - 1] &&\n items.value[index - 1].states.active)\n ) {\n return 'right'\n }\n return false\n }\n\n function handleMouseEnter() {\n data.hover = true\n if (props.pauseOnHover) {\n pauseTimer()\n }\n }\n\n function handleMouseLeave() {\n data.hover = false\n startTimer()\n }\n\n function handleButtonEnter(arrow: 'left' | 'right') {\n if (props.direction === 'vertical') return\n items.value.forEach((item, index) => {\n if (arrow === itemInStage(item, index)) {\n item.states.hover = true\n }\n })\n }\n\n function handleButtonLeave() {\n if (props.direction === 'vertical') return\n items.value.forEach(item => {\n item.states.hover = false\n })\n }\n\n function handleIndicatorClick(index: number) {\n data.activeIndex = index\n }\n\n function handleIndicatorHover(index: number) {\n if (props.trigger === 'hover' && index !== data.activeIndex) {\n data.activeIndex = index\n }\n }\n\n function prev() {\n setActiveItem(data.activeIndex - 1)\n }\n\n function next() {\n setActiveItem(data.activeIndex + 1)\n }\n\n function resetTimer() {\n pauseTimer()\n startTimer()\n }\n\n // watch\n watch(\n () => data.activeIndex,\n (current, prev) => {\n resetItemPosition(prev)\n if (prev > -1) {\n emit('change', current, prev)\n }\n },\n )\n watch(\n () => props.autoplay,\n current => {\n current ? startTimer() : pauseTimer()\n },\n )\n watch(\n () => props.loop,\n () => {\n setActiveItem(data.activeIndex)\n },\n )\n\n watch(\n () => props.interval,\n () => {\n resetTimer()\n },\n )\n\n watch(\n () => items.value,\n () => {\n if (items.value.length > 0) setActiveItem(props.initialIndex)\n },\n {\n immediate: true,\n },\n )\n\n const resizeObserver = shallowRef<ReturnType<typeof useResizeObserver>>()\n // lifecycle\n onMounted(() => {\n\n resizeObserver.value = useResizeObserver(root.value, () => {\n resetItemPosition()\n })\n startTimer()\n })\n\n onBeforeUnmount(() => {\n pauseTimer()\n if (root.value && resizeObserver.value) resizeObserver.value.stop()\n })\n\n // provide\n provide(carouselContextKey, {\n root,\n direction: props.direction,\n type: props.type,\n items,\n loop: props.loop,\n addItem,\n removeItem,\n setActiveItem,\n showMultiple: toRef(showMultiple,'value'),\n itemsWidth: props.itemsWidth,\n itemsWidthUnit: data.itemsWidthUnit,\n })\n\n provide(carouselIndicatorContextKey, {\n activeIndex: toRef(data,'activeIndex'),\n handleIndicatorClick,\n throttledIndicatorHover,\n })\n\n return {\n t,\n data,\n props,\n items,\n\n arrowDisplay,\n carouselClasses,\n indicatorsClasses,\n indicatorsButtonClasses,\n hasLabel,\n containerWidth,\n showMultiple,\n\n handleMouseEnter,\n handleMouseLeave,\n handleIndicatorClick,\n throttledArrowClick,\n throttledIndicatorHover,\n handleButtonEnter,\n handleButtonLeave,\n\n prev,\n next,\n setActiveItem,\n\n root,\n }\n },\n\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_withModifiers","_createElementVNode","_normalizeStyle","_createBlock","_Transition","_createVNode","_renderSlot","_Fragment"],"mappings":"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"}