UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 28.4 kB
{"version":3,"file":"carousel.vue2.cjs","sources":["../../../components/carousel/carousel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useHoverDelay, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { carouselProps } from './props'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { CarouselSlots, CarouselState, ItemState } from './symbol'\n\ndefineOptions({ name: 'Carousel' })\n\nconst _props = defineProps(carouselProps)\nconst props = useProps('carousel', _props, {\n active: {\n default: 0,\n static: true,\n },\n viewSize: {\n default: 3,\n validator: value => value > 0,\n },\n vertical: false,\n disabled: false,\n loop: false,\n arrow: {\n default: 'outside',\n validator: value => ['outside', 'inside', 'none'].includes(value),\n },\n arrowTrigger: {\n default: 'hover',\n validator: value => ['hover', 'always'].includes(value),\n },\n autoplay: {\n default: false,\n validator: value => (typeof value === 'number' ? value > 500 : true),\n },\n pointer: {\n default: 'none',\n validator: value => ['outside', 'inside', 'none'].includes(value),\n },\n speed: 300,\n activeOffset: 0,\n height: null,\n ignoreHover: false,\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<CarouselSlots>()\n\nconst nh = useNameHelper('carousel')\nconst icons = useIcons()\nconst hoverDelay = useHoverDelay()\nconst { isRtl } = useRtl()\nconst itemStates = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst isLocked = ref(false) // 用于控制阻断快速连点\nconst arrowActive = ref(props.arrowTrigger === 'always')\n\nconst listRect = reactive({\n width: 0,\n height: 0,\n})\nconst trackRect = reactive({\n width: 0,\n height: 0,\n offset: 0,\n})\nconst itemRect = reactive({\n width: 0,\n height: 0,\n})\n\nconst { wrapper, isHover } = useHover()\n\nconst prev = ref<HTMLElement>()\nconst next = ref<HTMLElement>()\n\nconst isDisabled = computed(() => {\n return props.disabled || itemStates.value.size <= props.viewSize\n})\nconst className = computed(() => {\n return {\n [nh.b()]: true,\n [nh.bs('vars')]: true,\n [nh.bm('inherit')]: props.inherit,\n [nh.bm('vertical')]: props.vertical,\n [nh.bm('disabled')]: isDisabled.value,\n }\n})\nconst style = computed(() => {\n return {\n height:\n props.vertical && props.height\n ? `${props.height}${typeof props.height === 'number' ? 'px' : ''}`\n : undefined,\n }\n})\nconst listStyle = computed(() => {\n return {\n width: listRect.width ? `${listRect.width}px` : undefined,\n height: listRect.height ? `${listRect.height}px` : undefined,\n }\n})\nconst trackStyle = computed(() => {\n return {\n width: trackRect.width ? `${trackRect.width}px` : undefined,\n height: trackRect.height ? `${trackRect.height}px` : undefined,\n transform: trackRect.offset\n ? `translate${props.vertical ? 'Y' : 'X'}(${\n isRtl.value && !props.vertical ? `${-trackRect.offset}` : trackRect.offset\n }px) translateZ(0)`\n : undefined,\n transitionDuration: isLocked.value ? '0ms' : `${props.speed}ms`,\n }\n})\nconst disabledPrev = computed(() => {\n return isDisabled.value || (!props.loop && currentActive.value <= 0)\n})\nconst disabledNext = computed(() => {\n return (\n isDisabled.value ||\n (!props.loop && currentActive.value >= itemStates.value.size - props.viewSize)\n )\n})\nconst arrowIcons = computed(() => {\n return props.vertical\n ? [icons.value.angleUp, icons.value.angleDown]\n : isRtl.value\n ? [icons.value.angleRight, icons.value.angleLeft]\n : [icons.value.angleLeft, icons.value.angleRight]\n})\n\nwatch(\n () => props.active,\n value => {\n handleWheel(value - props.activeOffset)\n },\n)\nwatch(isHover, value => {\n if (props.ignoreHover) return\n\n if (value) {\n handleMouseEnter()\n } else {\n handleMouseLeave()\n }\n})\nwatch(() => props.viewSize, refresh)\nwatch(() => props.autoplay, setAutoplay)\n\nconst refreshLabels = debounceMinor(() => {\n Array.from(itemStates.value).forEach((item, index) => {\n item.label = index\n })\n})\nconst updateItemRect = debounceMinor(() => {\n itemStates.value.forEach(state => {\n state.width = itemRect.width\n state.height = itemRect.height\n })\n})\nconst updateListRect = debounceMinor(() => {\n trackRect.width = itemRect.width * itemStates.value.size\n trackRect.height = itemRect.height * itemStates.value.size\n})\n\nprovide<CarouselState>(\n CAROUSEL_STATE,\n reactive({\n vertical: toRef(props, 'vertical'),\n increaseItem,\n decreaseItem,\n isItemActive,\n handleSelect,\n }),\n)\n\n// 初始化时不使用过渡效果\nlet inTransition = false\nlet shouldReset = false\n\nisLocked.value = true\n\nonMounted(() => {\n computeItemRect()\n handleWheel(props.active - props.activeOffset)\n handleAfterMove()\n\n setTimeout(() => {\n isLocked.value = false\n inTransition = false\n\n setAutoplay()\n }, 0)\n})\n\ndefineExpose({\n itemStates,\n currentActive,\n arrowActive,\n wrapper,\n prev,\n next,\n refresh,\n})\n\nfunction increaseItem(item: ItemState) {\n itemStates.value.add(item)\n refreshLabels()\n updateItemRect()\n updateListRect()\n}\n\nfunction decreaseItem(item: ItemState) {\n itemStates.value.delete(item)\n refreshLabels()\n updateListRect()\n}\n\nfunction isItemActive(label: number) {\n return (currentActive.value + props.activeOffset) % itemStates.value.size === label\n}\n\nfunction computeItemRect() {\n if (!wrapper.value) return\n\n let prevFix = 0\n let nextFix = 0\n\n if (props.arrow === 'outside') {\n if (props.vertical) {\n prevFix = prev.value ? prev.value.offsetHeight : 0\n nextFix = next.value ? next.value.offsetHeight : 0\n } else {\n prevFix = prev.value ? prev.value.offsetWidth : 0\n nextFix = next.value ? next.value.offsetWidth : 0\n }\n }\n\n if (props.vertical) {\n listRect.width = 0\n listRect.height = wrapper.value.offsetHeight - prevFix - nextFix\n\n itemRect.width = 0\n itemRect.height = listRect.height / props.viewSize\n } else {\n listRect.width = wrapper.value.offsetWidth - prevFix - nextFix\n listRect.height = 0\n\n itemRect.width = listRect.width / props.viewSize\n itemRect.height = 0\n }\n}\n\nfunction refresh() {\n computeItemRect()\n updateItemRect()\n updateListRect()\n\n if (trackRect.offset > 0) {\n handlePrev(0)\n } else {\n handleNext(0)\n }\n\n setTimeout(() => {\n isLocked.value = false\n inTransition = false\n }, 0)\n}\n\nfunction emitChangeEvent() {\n const active = (currentActive.value + props.activeOffset) % itemStates.value.size\n\n emit('update:active', active)\n emitEvent(props.onChange, active)\n}\n\nfunction handlePrev(amount = 1) {\n if (isDisabled.value || inTransition) return\n\n const itemLength = props.vertical ? itemRect.height : itemRect.width\n const itemList = Array.from(itemStates.value)\n const itemCount = itemList.length\n const targetIndex = (currentActive.value - amount + itemCount) % itemCount\n const prevActive = currentActive.value\n\n if (targetIndex >= itemCount - props.viewSize) {\n if (!props.loop) return\n\n if (trackRect.offset < 0) {\n if (amount < currentActive.value) {\n trackRect.offset = -targetIndex * itemLength\n } else {\n trackRect.offset = itemLength * (itemCount - targetIndex)\n\n for (let i = targetIndex; i < itemCount; ++i) {\n itemList[i].offset = -itemCount * itemLength\n }\n }\n } else {\n for (let i = 0; i < itemCount; ++i) {\n itemList[i].offset =\n i < targetIndex\n ? 0\n : (isRtl.value && !props.vertical ? itemCount : -itemCount) * itemLength\n }\n\n trackRect.offset = itemLength * (itemCount - targetIndex)\n }\n\n currentActive.value = targetIndex\n } else {\n currentActive.value = targetIndex\n trackRect.offset = -currentActive.value * itemLength\n }\n\n shouldReset = currentActive.value <= itemCount - props.viewSize\n inTransition = true\n\n currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleNext(amount = 1) {\n if (isDisabled.value || inTransition) return\n\n const itemLength = props.vertical ? itemRect.height : itemRect.width\n const itemList = Array.from(itemStates.value)\n const itemCount = itemList.length\n const targetIndex = currentActive.value + amount\n const prevActive = currentActive.value\n\n if (targetIndex > itemStates.value.size - props.viewSize) {\n if (!props.loop) return\n\n if (trackRect.offset > 0) {\n trackRect.offset = itemLength * (itemCount - targetIndex)\n } else {\n const anchorIndex = targetIndex + props.viewSize - itemCount\n\n for (let i = 0, len = itemList.length; i < len; ++i) {\n itemList[i].offset =\n i < anchorIndex\n ? (isRtl.value && !props.vertical ? -itemCount : itemCount) * itemLength\n : 0\n }\n\n trackRect.offset = -targetIndex * itemLength\n }\n\n currentActive.value = targetIndex % itemCount\n } else {\n currentActive.value = targetIndex\n trackRect.offset = -currentActive.value * itemLength\n }\n\n shouldReset = currentActive.value <= itemCount - props.viewSize\n inTransition = true\n\n currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleWheel(active: number) {\n if (isDisabled.value || inTransition || active === currentActive.value) return\n\n const itemCount = itemStates.value.size\n\n active = (active % itemCount) + (active < 0 ? itemCount : 0)\n\n if (props.loop) {\n let forward: number\n let back: number\n\n if (active > currentActive.value) {\n forward = active - currentActive.value\n back = itemCount - active + currentActive.value\n } else {\n forward = itemCount - currentActive.value + active\n back = currentActive.value - active\n }\n\n if (forward < back) {\n handleNext(forward)\n } else if (forward > back) {\n handlePrev(back)\n } else {\n if (trackRect.offset > 0) {\n handlePrev(forward)\n } else {\n handleNext(forward)\n }\n }\n } else {\n if (active < currentActive.value) {\n handlePrev(currentActive.value - active)\n } else {\n handleNext(active - currentActive.value)\n }\n }\n}\n\nfunction handleAfterMove() {\n if (!shouldReset) {\n inTransition = false\n } else {\n itemStates.value.forEach(state => {\n state.offset = 0\n })\n\n shouldReset = false\n isLocked.value = true\n\n requestAnimationFrame(() => {\n trackRect.offset = -currentActive.value * (props.vertical ? itemRect.height : itemRect.width)\n\n requestAnimationFrame(() => {\n isLocked.value = false\n inTransition = false\n })\n })\n }\n}\n\nfunction handlePrevClick() {\n handlePrev(1)\n emitEvent(props.onPrev, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleNextClick() {\n handleNext(1)\n emitEvent(props.onNext, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleSelect(label: number) {\n emitEvent(props.onSelect, label)\n}\n\nconst { timer } = useSetTimeout()\n\nfunction setAutoplay() {\n clearInterval(timer.play)\n\n if (!props.autoplay) return\n\n let waiting = 4000\n\n if (typeof props.autoplay === 'number') {\n waiting = props.autoplay\n }\n\n timer.play = window.setInterval(() => {\n if (!props.loop && disabledNext.value) {\n handleWheel(0)\n } else {\n handleNext()\n }\n }, waiting)\n}\n\nfunction handleMouseEnter() {\n if (props.autoplay) {\n clearTimeout(timer.hover)\n\n timer.hover = setTimeout(() => {\n clearInterval(timer.play)\n }, hoverDelay.value)\n }\n\n if (props.arrowTrigger === 'hover' && props.arrow === 'inside') {\n arrowActive.value = true\n }\n}\n\nfunction handleMouseLeave() {\n if (props.autoplay) {\n clearTimeout(timer.hover)\n\n timer.hover = setTimeout(() => {\n setAutoplay()\n }, hoverDelay.value)\n }\n\n if (props.arrowTrigger === 'hover') {\n arrowActive.value = false\n }\n}\n\nfunction isPointerDisabled(index: number) {\n if (props.loop) return false\n\n return !(\n index >= props.activeOffset - 1 && index < itemStates.value.size - props.activeOffset - 1\n )\n}\n</script>\n\n<template>\n <div\n ref=\"wrapper\"\n :class=\"className\"\n role=\"list\"\n :style=\"style\"\n >\n <ResizeObserver @resize=\"refresh\">\n <div\n :style=\"{\n position: 'relative',\n display: 'flex',\n flexDirection: props.vertical ? 'column' : 'row',\n width: '100%'\n }\"\n >\n <div\n v-if=\"props.arrow !== 'none'\"\n ref=\"prev\"\n :class=\"[\n nh.bem('arrow', props.arrow),\n nh.bem('arrow', 'prev'),\n arrowActive ? nh.bem('arrow', 'show') : ''\n ]\"\n >\n <div\n :class=\"{\n [nh.be('handler')]: true,\n [nh.bem('handler', 'disabled')]: disabledPrev\n }\"\n @click=\"handlePrevClick\"\n >\n <slot name=\"prevArrow\" :disabled=\"disabledPrev\">\n <Renderer :renderer=\"props.slots.prevArrow\" :data=\"{ disabled: disabledPrev }\">\n <Icon v-bind=\"arrowIcons[0]\" :scale=\"+(arrowIcons[0].scale || 1) * 1.5\"></Icon>\n </Renderer>\n </slot>\n </div>\n </div>\n <div :class=\"nh.be('list')\" :style=\"listStyle\">\n <div :class=\"nh.be('track')\" :style=\"trackStyle\" @transitionend.self=\"handleAfterMove\">\n <slot> <Renderer :renderer=\"props.slots.default\"></Renderer>> </slot>\n </div>\n </div>\n <div\n v-if=\"props.arrow !== 'none'\"\n ref=\"next\"\n :class=\"[\n nh.bem('arrow', props.arrow),\n nh.bem('arrow', 'next'),\n arrowActive ? nh.bem('arrow', 'show') : ''\n ]\"\n >\n <div\n :class=\"{\n [nh.be('handler')]: true,\n [nh.bem('handler', 'disabled')]: disabledNext\n }\"\n @click=\"handleNextClick\"\n >\n <slot name=\"nextArrow\" :disabled=\"disabledNext\">\n <Renderer :renderer=\"props.slots.nextArrow\" :data=\"{ disabled: disabledNext }\">\n <Icon v-bind=\"arrowIcons[1]\" :scale=\"+(arrowIcons[1].scale || 1) * 1.5\"></Icon>\n </Renderer>\n </slot>\n </div>\n </div>\n </div>\n </ResizeObserver>\n <div v-if=\"props.pointer !== 'none'\" :class=\"nh.bem('pointers', props.pointer)\">\n <div\n v-for=\"index in itemStates.size\"\n :key=\"index\"\n :class=\"{\n [nh.be('pointer')]: true,\n [nh.bem('pointer', 'active')]:\n index - 1 === (currentActive + props.activeOffset) % itemStates.size,\n [nh.bem('pointer', 'disabled')]: isPointerDisabled(index - props.activeOffset - 1)\n }\"\n @click=\"handleWheel(index - props.activeOffset - 1)\"\n >\n <slot\n name=\"pointer\"\n :active=\"index - 1 === (currentActive + props.activeOffset) % itemStates.size\"\n >\n <Renderer\n :renderer=\"props.slots.pointer\"\n :data=\"{ active: index - 1 === (currentActive + props.activeOffset) % itemStates.size }\"\n >\n <span :class=\"nh.be('pointer-inner')\"></span>\n </Renderer>\n </slot>\n </div>\n </div>\n </div>\n</template>\n"],"names":["_props","__props","props","useProps","value","emit","__emit","nh","useNameHelper","icons","useIcons","hoverDelay","useHoverDelay","isRtl","useRtl","itemStates","ref","currentActive","isLocked","arrowActive","listRect","reactive","trackRect","itemRect","wrapper","isHover","useHover","prev","next","isDisabled","computed","className","style","listStyle","trackStyle","disabledPrev","disabledNext","arrowIcons","watch","handleWheel","handleMouseEnter","handleMouseLeave","refresh","setAutoplay","refreshLabels","debounceMinor","item","index","updateItemRect","state","updateListRect","provide","CAROUSEL_STATE","toRef","increaseItem","decreaseItem","isItemActive","handleSelect","inTransition","shouldReset","onMounted","computeItemRect","handleAfterMove","__expose","label","prevFix","nextFix","handlePrev","handleNext","emitChangeEvent","active","emitEvent","amount","itemLength","itemList","itemCount","targetIndex","prevActive","i","anchorIndex","len","forward","back","handlePrevClick","handleNextClick","timer","useSetTimeout","waiting","isPointerDisabled","_createElementBlock","_createVNode","_unref","ResizeObserver","_createElementVNode","_normalizeStyle","_normalizeClass","_renderSlot","_ctx","Renderer","Icon","_mergeProps","_openBlock","_Fragment","_renderList"],"mappings":"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"}