UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 8.85 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: Required<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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"}