UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 22.9 kB
{"version":3,"file":"swiper.mjs","sources":["../../src/swiper/swiper.tsx"],"sourcesContent":["import { defineComponent, ref, computed, watch, isVNode, onMounted, cloneVNode } from 'vue';\n\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useChildComponentSlots } from '../hooks';\nimport props from './props';\nimport { SwiperNavigation, SwiperChangeSource } from './type';\nimport TSwiperItem from './swiper-item';\nimport { useTNodeJSX } from '../hooks/tnode';\n\nconst defaultNavigation: SwiperNavigation = {\n placement: 'inside',\n showSlideBtn: 'always',\n size: 'medium',\n type: 'bars',\n};\n\nexport default defineComponent({\n name: 'XSwiper',\n props: { ...props },\n emits: ['update:current'],\n setup(props, { emit }) {\n const prefix = usePrefixClass();\n const renderTNodeJSX = useTNodeJSX();\n\n let swiperTimer: ReturnType<typeof setTimeout> | null = null;\n let swiperSwitchingTimer = 0;\n let isBeginToEnd = false;\n let isEndToBegin = false;\n const currentIndex = ref(props.current || props.defaultCurrent);\n const navActiveIndex = ref(props.current || props.defaultCurrent);\n const isHovering = ref(false);\n const isSwitching = ref(false);\n const showArrow = ref(false);\n const swiperWrap = ref<HTMLElement>();\n const getChildComponentByName = useChildComponentSlots();\n\n const swiperItemLength = ref(0);\n const navigationConfig = computed(() => {\n return {\n ...defaultNavigation,\n ...(isVNode(props.navigation) ? {} : (props.navigation as object)),\n };\n });\n const isEnd = computed(() => {\n if (props.type === 'card') {\n return !props.loop && currentIndex.value + 1 >= swiperItemLength.value;\n }\n return !props.loop && currentIndex.value + 2 >= swiperItemLength.value;\n });\n const propsToUpdateSetTimer = computed(() => {\n return [props.autoplay, currentIndex.value, props.duration, props.interval];\n });\n const swiperWrapClass = computed(() => {\n return {\n [`${prefix.value}-swiper__wrap`]: true,\n [`${prefix.value}-swiper--inside`]: navigationConfig.value.placement === 'inside',\n [`${prefix.value}-swiper--outside`]: navigationConfig.value.placement === 'outside',\n [`${prefix.value}-swiper--vertical`]: props.direction === 'vertical',\n [`${prefix.value}-swiper--large`]: navigationConfig.value.size === 'large',\n [`${prefix.value}-swiper--small`]: navigationConfig.value.size === 'small',\n };\n });\n const containerStyle = computed(() => {\n const offsetHeight = props.height ? `${props.height}px` : `${getWrapAttribute('offsetHeight')}px`;\n if (props.type === 'card' || props.animation === 'fade') {\n return {\n height: offsetHeight,\n };\n }\n if (props.animation === 'slide') {\n const style: Record<string, number | string> = {\n transition: isSwitching.value ? `transform ${props.duration / 1000}s ease` : '',\n };\n let active = currentIndex.value;\n if (swiperItemLength.value > 1) {\n active += 1;\n if (isBeginToEnd || isEndToBegin) {\n style.transition = '';\n }\n }\n if (props.direction === 'vertical') {\n style.height = offsetHeight;\n style.transform = `translate3d(0, -${active * 100}%, 0px)`;\n } else {\n style.transform = `translate3d(-${active * 100}%, 0px, 0px)`;\n }\n ['msTransform', 'WebkitTransform'].forEach((key) => {\n style[key] = style.transform;\n });\n return style;\n }\n return {};\n });\n const swiperItems = () => {\n const swiperItemList = getChildComponentByName('SwiperItem');\n swiperItemLength.value = swiperItemList.length;\n const items = swiperItemList.map((swiperItem: any, index) => {\n const p = { ...props, ...swiperItem.props };\n return (\n <TSwiperItem\n index={index}\n currentIndex={currentIndex.value}\n isSwitching={isSwitching.value}\n getWrapAttribute={getWrapAttribute}\n swiperItemLength={swiperItemLength.value}\n {...p}\n >\n {swiperItem.children.default()}\n </TSwiperItem>\n );\n });\n if (props.animation === 'slide' && items.length > 1) {\n const first = cloneVNode(items[0], {\n key: `swiper-item-append-${0}`,\n });\n const last = cloneVNode(items[items.length - 1], {\n key: `swiper-item-prepend-${items.length - 1}`,\n });\n items.unshift(last);\n items.push(first);\n }\n return items;\n };\n\n const swiperTo = (index: number, context: { source: SwiperChangeSource }) => {\n let targetIndex = index % swiperItemLength.value;\n navActiveIndex.value = targetIndex;\n emit('update:current', targetIndex);\n props.onChange?.(targetIndex, context);\n isSwitching.value = true;\n if (props.animation === 'slide' && swiperItemLength.value > 1 && props.type !== 'card') {\n targetIndex = index;\n isBeginToEnd = false;\n isEndToBegin = false;\n if (index >= swiperItemLength.value) {\n clearTimer();\n setTimeout(() => {\n isEndToBegin = true;\n currentIndex.value = 0;\n }, props.duration);\n }\n if (currentIndex.value === 0) {\n if (\n (swiperItemLength.value > 2 && index === swiperItemLength.value - 1) ||\n (swiperItemLength.value === 2 && index === 0)\n ) {\n targetIndex = -1;\n navActiveIndex.value = swiperItemLength.value - 1;\n clearTimer();\n setTimeout(() => {\n isBeginToEnd = true;\n currentIndex.value = swiperItemLength.value - 1;\n }, props.duration);\n }\n }\n }\n currentIndex.value = targetIndex;\n };\n const clearTimer = () => {\n if (swiperTimer) {\n clearTimeout(swiperTimer);\n swiperTimer = null;\n }\n };\n const setTimer = () => {\n if (props.autoplay && props.interval > 0) {\n clearTimer();\n swiperTimer = setTimeout(\n () => {\n swiperTo(currentIndex.value + 1, { source: 'autoplay' });\n },\n currentIndex.value === 0 ? props.interval - (props.duration + 50) : props.interval, // 当 index 为 0 的时候,表明刚从克隆的最后一项跳转过来,已经经历了duration + 50 的间隔时间,减去即可\n );\n }\n };\n\n const onMouseEnter = () => {\n isHovering.value = true;\n if (props.stopOnHover) {\n clearTimer();\n }\n if (navigationConfig.value.showSlideBtn === 'hover') {\n showArrow.value = true;\n }\n };\n const onMouseLeave = () => {\n isHovering.value = false;\n if (!isEnd.value) {\n setTimer();\n }\n if (navigationConfig.value.showSlideBtn === 'hover') {\n showArrow.value = false;\n }\n };\n const onMouseEnterNavigationItem = (i: number) => {\n if (props.trigger === 'hover') {\n swiperTo(i, { source: 'hover' });\n }\n };\n const onClickNavigationItem = (i: number) => {\n if (props.trigger === 'click') {\n swiperTo(i, { source: 'click' });\n }\n };\n const goNext = (context: { source: SwiperChangeSource }) => {\n if (isSwitching.value) return;\n if (props.type === 'card') {\n return swiperTo(currentIndex.value + 1 >= swiperItemLength.value ? 0 : currentIndex.value + 1, context);\n }\n return swiperTo(currentIndex.value + 1, context);\n };\n const goPrevious = (context: { source: SwiperChangeSource }) => {\n if (isSwitching.value) return;\n if (currentIndex.value - 1 < 0) {\n if (props.animation === 'slide' && swiperItemLength.value === 2) {\n return swiperTo(0, context);\n }\n return swiperTo(swiperItemLength.value - 1, context);\n }\n return swiperTo(currentIndex.value - 1, context);\n };\n const getWrapAttribute = (attr: string) => {\n return swiperWrap.value?.parentNode?.[attr];\n };\n const renderPagination = () => {\n const fractionIndex = currentIndex.value + 1 > swiperItemLength.value ? 1 : currentIndex.value + 1;\n return (\n <div class={`${prefix.value}-swiper__arrow`}>\n <div class={`${prefix.value}-swiper__arrow-left`} onClick={() => goPrevious({ source: 'click' })}>\n <icon-ri-arrow-left-s-line />\n </div>\n <div class={`${prefix.value}-swiper__navigation-text-fraction`}>\n {fractionIndex}/{swiperItemLength.value}\n </div>\n <div class={`${prefix.value}-swiper__arrow-right`} onClick={() => goNext({ source: 'click' })}>\n <icon-ri-arrow-right-s-line />\n </div>\n </div>\n );\n };\n const renderArrow = () => {\n if (!showArrow.value) return null;\n return (\n <div class={[`${prefix.value}-swiper__arrow`, `${prefix.value}-swiper__arrow--default`]}>\n <div class={`${prefix.value}-swiper__arrow-left`} onClick={() => goPrevious({ source: 'click' })}>\n <icon-ri-arrow-left-s-line />\n </div>\n <div class={`${prefix.value}-swiper__arrow-right`} onClick={() => goNext({ source: 'click' })}>\n <icon-ri-arrow-right-s-line />\n </div>\n </div>\n );\n };\n const renderNavigation = () => {\n if (isVNode(props.navigation)) return props.navigation;\n const navigationSlot = renderTNodeJSX('navigation');\n if (navigationSlot && isVNode(navigationSlot?.[0])) return navigationSlot;\n\n if (navigationConfig.value.type === 'fraction') {\n return (\n <div class={[`${prefix.value}-swiper__navigation`, `${prefix.value}-swiper__navigation--fraction`]}>\n {renderPagination()}\n </div>\n );\n }\n const swiperItemList = getChildComponentByName('SwiperItem');\n return (\n <ul\n class={[\n `${prefix.value}-swiper__navigation`,\n {\n [`${prefix.value}-swiper__navigation-bars`]: navigationConfig.value.type === 'bars',\n [`${prefix.value}-swiper__navigation-dots`]: navigationConfig.value.type === 'dots',\n [`${prefix.value}-swiper__navigation-dots-bar`]: navigationConfig.value.type === 'dots-bar',\n },\n ]}\n >\n {swiperItemList.map((_, i: number) => (\n <li\n key={i}\n class={[\n `${prefix.value}-swiper__navigation-item`,\n {\n [`${prefix.value}-is-active`]: i === navActiveIndex.value,\n },\n ]}\n onMouseenter={() => onMouseEnterNavigationItem(i)}\n onClick={() => onClickNavigationItem(i)}\n >\n <span></span>\n </li>\n ))}\n </ul>\n );\n };\n const renderSwiperItems = () => {\n return swiperItems();\n };\n\n watch(\n () => propsToUpdateSetTimer.value,\n () => {\n setTimer();\n },\n );\n watch(\n () => isSwitching.value,\n () => {\n if (isSwitching.value) {\n if (swiperSwitchingTimer) clearTimeout(swiperSwitchingTimer);\n swiperSwitchingTimer = setTimeout(() => {\n isSwitching.value = false;\n swiperSwitchingTimer = 0;\n if (isEnd.value) {\n clearTimer();\n }\n }, props.duration + 50) as unknown as number;\n }\n },\n );\n watch(\n () => props.current,\n () => {\n swiperTo(props.current, { source: 'autoplay' });\n },\n );\n\n onMounted(() => {\n setTimer();\n showArrow.value = navigationConfig.value.showSlideBtn === 'always';\n });\n\n return () => (\n <div class={[`${prefix.value}-swiper`]} onMouseenter={onMouseEnter} onMouseleave={onMouseLeave} ref={swiperWrap}>\n <div class={swiperWrapClass.value}>\n <div\n class={[\n `${prefix.value}-swiper__content`,\n {\n [`${prefix.value}-swiper-fade`]: props.animation === 'fade',\n [`${prefix.value}-swiper-card`]: props.type === 'card',\n },\n ]}\n >\n <div class={`${prefix.value}-swiper__container`} style={containerStyle.value}>\n {renderSwiperItems()}\n </div>\n </div>\n {renderNavigation()}\n {renderArrow()}\n </div>\n </div>\n );\n },\n});\n"],"names":["_isVNode","placement","showSlideBtn","size","type","name","props","setup","height","transition","active","style","swiperItemLength","_createVNode","TSwiperItem","_mergeProps","key","items","emit","targetIndex","isBeginToEnd","isEndToBegin","clearTimer","setTimeout","navActiveIndex","currentIndex","swiperTimer","swiperTo","source","setTimer","watch","swiperSwitchingTimer","onMounted"],"mappings":"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"}