UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 9.13 kB
{"version":3,"file":"use-carousel-item.mjs","sources":["../../../../../../packages/components/carousel/src/use-carousel-item.ts"],"sourcesContent":["import {\n getCurrentInstance,\n inject,\n onBeforeUnmount,\n reactive,\n ref,\n unref,\n} from 'vue'\nimport { debugWarn, isUndefined } from '@element-plus/utils'\nimport { CAROUSEL_ITEM_NAME, carouselContextKey } from './constants'\n\nimport type { CarouselItemProps } from './carousel-item'\n\nexport const useCarouselItem = (props: CarouselItemProps) => {\n const carouselContext = inject(carouselContextKey)!\n // instance\n const instance = getCurrentInstance()!\n if (!carouselContext) {\n debugWarn(\n CAROUSEL_ITEM_NAME,\n 'usage: <el-carousel></el-carousel-item></el-carousel>'\n )\n }\n\n if (!instance) {\n debugWarn(\n CAROUSEL_ITEM_NAME,\n 'compositional hook can only be invoked inside setups'\n )\n }\n\n const carouselItemRef = ref<HTMLElement>()\n const hover = ref(false)\n const translate = ref(0)\n const scale = ref(1)\n const active = ref(false)\n const ready = ref(false)\n const inStage = ref(false)\n const animating = ref(false)\n\n // computed\n const { isCardType, isVertical, cardScale } = carouselContext\n\n // methods\n\n function processIndex(index: number, activeIndex: number, length: number) {\n const lastItemIndex = length - 1\n const prevItemIndex = activeIndex - 1\n const nextItemIndex = activeIndex + 1\n const halfItemIndex = length / 2\n\n if (activeIndex === 0 && index === lastItemIndex) {\n return -1\n } else if (activeIndex === lastItemIndex && index === 0) {\n return length\n } else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) {\n return length + 1\n } else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) {\n return -2\n }\n return index\n }\n\n function calcCardTranslate(index: number, activeIndex: number) {\n const parentWidth = unref(isVertical)\n ? carouselContext.root.value?.offsetHeight || 0\n : carouselContext.root.value?.offsetWidth || 0\n\n if (inStage.value) {\n return (parentWidth * ((2 - cardScale) * (index - activeIndex) + 1)) / 4\n } else if (index < activeIndex) {\n return (-(1 + cardScale) * parentWidth) / 4\n } else {\n return ((3 + cardScale) * parentWidth) / 4\n }\n }\n\n function calcTranslate(\n index: number,\n activeIndex: number,\n isVertical: boolean\n ) {\n const rootEl = carouselContext.root.value\n if (!rootEl) return 0\n\n const distance =\n (isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0\n return distance * (index - activeIndex)\n }\n\n const translateItem = (\n index: number,\n activeIndex: number,\n oldIndex?: number\n ) => {\n const _isCardType = unref(isCardType)\n const carouselItemLength = carouselContext.items.value.length ?? Number.NaN\n\n const isActive = index === activeIndex\n if (!_isCardType && !isUndefined(oldIndex)) {\n animating.value = isActive || index === oldIndex\n }\n\n if (!isActive && carouselItemLength > 2 && carouselContext.loop) {\n index = processIndex(index, activeIndex, carouselItemLength)\n }\n\n const _isVertical = unref(isVertical)\n active.value = isActive\n\n if (_isCardType) {\n inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1\n translate.value = calcCardTranslate(index, activeIndex)\n scale.value = unref(active) ? 1 : cardScale\n } else {\n translate.value = calcTranslate(index, activeIndex, _isVertical)\n }\n\n ready.value = true\n\n if (isActive && carouselItemRef.value) {\n carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight)\n }\n }\n\n function handleItemClick() {\n if (carouselContext && unref(isCardType)) {\n const index = carouselContext.items.value.findIndex(\n ({ uid }) => uid === instance.uid\n )\n carouselContext.setActiveItem(index)\n }\n }\n\n const carouselItemContext = {\n props,\n states: reactive({\n hover,\n translate,\n scale,\n active,\n ready,\n inStage,\n animating,\n }),\n uid: instance.uid,\n getVnode: () => instance.vnode,\n translateItem,\n }\n\n carouselContext.addItem(carouselItemContext)\n\n onBeforeUnmount(() => {\n carouselContext.removeItem(carouselItemContext)\n })\n\n return {\n carouselItemRef,\n active,\n animating,\n hover,\n inStage,\n isVertical,\n translate,\n isCardType,\n scale,\n ready,\n handleItemClick,\n }\n}\n"],"names":["isVertical"],"mappings":"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"}