tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 33.3 kB
Source Map (JSON)
{"version":3,"file":"swiper.mjs","sources":["../../src/swiper/swiper.tsx"],"sourcesContent":["import { onMounted, computed, ref, provide, watch, onUnmounted, toRefs, defineComponent } from 'vue';\nimport { isNumber } from 'lodash-es';\nimport { useSwipe } from '../swipe-cell/useSwipe';\nimport config from '../config';\nimport props from './props';\nimport { SwiperChangeSource, SwiperNavigation } from './type';\nimport useVModel from '../hooks/useVModel';\nimport { preventDefault } from '../shared/dom';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useClass';\n\nconst DEFAULT_SWIPER_NAVIGATION: SwiperNavigation = {\n paginationPosition: 'bottom',\n placement: 'inside',\n showControls: false,\n type: 'dots',\n};\n\n/**\n * 滑动触发阈值\n */\nconst SWIPE_THRESHOLD = 100;\n\nconst { prefix } = config;\n\n// 定义 SwiperItem 的接口\ninterface SwiperItemInstance {\n uid: number;\n proxy: any;\n calcTranslateStyle: (index: number, activeIndex: number) => void;\n}\n\nexport default defineComponent({\n name: `${prefix}-swiper`,\n props: {\n ...props,\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['change', 'update:current', 'update:modelValue', 'transitionenter', 'transitionleave'],\n setup(props, { emit, expose, slots }) {\n const swiperClass = usePrefixClass('swiper');\n const swiperNavClass = usePrefixClass('swiper-nav');\n\n const renderTNodeJSX = useTNodeJSX();\n const setOffset = (offset: number, direction: 'X' | 'Y' = 'X'): void => {\n translateContainer.value = `translate${direction}(${offset}px)`;\n };\n\n const root = ref();\n const items = ref<SwiperItemInstance[]>([]);\n const { current: value, modelValue } = toRefs(props);\n const [currentIndex, setCurrent] = useVModel(value, modelValue, props.defaultCurrent);\n const swiperContainer = ref<HTMLElement | null>(null);\n const previous = ref(currentIndex.value ?? 0);\n\n const animating = ref(false);\n const disabled = ref(false);\n const isSwiperDisabled = computed(() => props.disabled === true);\n const translateContainer = ref('');\n\n const isVertical = computed(() => props.direction === 'vertical');\n const containerHeight = ref('auto');\n // 滑动方向:1 表示向下一页, -1 表示向上一页, 0 表示无方向\n const moveDirection = ref(0);\n\n const navigationConfig = computed<SwiperNavigation>(() => {\n if (props.navigation === true) {\n return DEFAULT_SWIPER_NAVIGATION;\n }\n if (typeof props.navigation === 'object' && props.navigation !== null) {\n return {\n ...DEFAULT_SWIPER_NAVIGATION,\n ...props.navigation,\n } as SwiperNavigation;\n }\n\n return {} as SwiperNavigation;\n });\n\n /**\n * @description 是否启用内置导航器\n * - 非空 navigationConfig 代表启用内置导航器;\n * - navigation 为对象时,根据 minShowNum 判断是否满足最小展示数量\n */\n const enableBuiltinNavigation = computed(() => {\n if (!Object.keys(navigationConfig.value).length) return false;\n\n const { minShowNum } = navigationConfig.value;\n return minShowNum ? items.value.length >= minShowNum : true;\n });\n\n /**\n * @description 是否启用底部分页器\n */\n const isBottomPagination = computed(() => {\n if (!enableBuiltinNavigation.value) return false;\n\n const { paginationPosition, type } = navigationConfig.value;\n return paginationPosition === 'bottom' && (type === 'dots' || type === 'dots-bar');\n });\n\n const rootClass = computed(() => [\n `${swiperClass.value}`,\n { [`${swiperClass.value}--${navigationConfig.value.placement}`]: isBottomPagination.value },\n ]);\n\n let autoplayTimer: ReturnType<typeof setInterval> | null = null;\n\n const onItemClick = () => {\n props.onClick?.(currentIndex.value ?? 0);\n };\n\n const move = (step: number, source: SwiperChangeSource, isReset = false, targetValue?: number) => {\n const nextIndex = currentIndex.value + step;\n if (!props.loop && !(isReset || typeof targetValue === 'number')) {\n if (nextIndex < 0 || nextIndex >= items.value.length) return;\n }\n\n // 2 个 item 时,根据滑动方向更新 item 排列\n if (!isReset && items.value.length === 2 && props.loop) {\n moveDirection.value = step > 0 ? 1 : -1;\n updateItemPosition();\n }\n\n animating.value = true;\n const innerTargetValue = targetValue ?? (isReset ? step : nextIndex);\n processIndex(innerTargetValue, source);\n\n const moveDir = !isVertical.value ? 'X' : 'Y';\n const distance = root.value?.[isVertical.value ? 'offsetHeight' : 'offsetWidth'] ?? 0;\n\n translateContainer.value = `translate${moveDir}(${isReset ? 0 : -1 * distance * step}px)`;\n };\n\n const handleAnimationEnd = () => {\n disabled.value = false;\n animating.value = false;\n translateContainer.value = `translate${isVertical.value ? 'Y' : 'X'}(0)`;\n moveDirection.value = 0;\n\n updateItemPosition();\n };\n\n const stopAutoplay = () => {\n if (!autoplayTimer) return;\n clearInterval(autoplayTimer);\n autoplayTimer = null;\n };\n\n const startAutoplay = () => {\n if (!props.autoplay || autoplayTimer !== null) return false; // stop repeat autoplay\n autoplayTimer = setInterval(() => {\n goNext('autoplay');\n }, props.interval);\n };\n\n const goPrev = (source: SwiperChangeSource) => {\n disabled.value = true;\n move(-1, source);\n };\n const goNext = (source: SwiperChangeSource) => {\n disabled.value = true;\n move(1, source);\n };\n\n const innerSetCurrent = (val: number) => {\n setCurrent(val);\n previous.value = val;\n };\n\n const processIndex = (index: number, source: SwiperChangeSource) => {\n const max = items.value.length;\n let val = index;\n\n if (index < 0) {\n val = props.loop ? max - 1 : 0;\n }\n if (index >= max) {\n val = props.loop ? 0 : max - 1;\n }\n innerSetCurrent(val);\n emit('update:current', val);\n emit('change', val, { source });\n };\n\n const { lengthX, lengthY } = useSwipe(swiperContainer, {\n onSwipeStart() {\n if (disabled.value || isSwiperDisabled.value || !items.value.length) return;\n stopAutoplay();\n },\n onSwipe(e: TouchEvent) {\n if (disabled.value || isSwiperDisabled.value || !items.value.length) return;\n onTouchMove(e);\n },\n onSwipeEnd() {\n if (disabled.value || isSwiperDisabled.value || !items.value.length) return;\n onTouchEnd();\n },\n });\n\n const onTouchMove = (event: TouchEvent) => {\n preventDefault(event, false);\n\n animating.value = false;\n\n const curIndex = currentIndex.value;\n const maxIndex = items.value.length - 1;\n const distance = isVertical.value ? lengthY.value : lengthX.value;\n const dir = isVertical.value ? 'Y' : 'X';\n\n // 非loop状态: 阻止第一项向左滑(显示上一项)和最后一项向右滑(显示下一项)\n if (!props.loop && ((curIndex <= 0 && distance < 0) || (curIndex >= maxIndex && distance > 0))) return;\n\n // 2 个 item 时,根据手势方向动态调整另一个 item 的位置\n if (items.value.length === 2 && props.loop) {\n moveDirection.value = distance > 0 ? 1 : -1;\n updateItemPosition();\n }\n\n setOffset(-distance, dir);\n };\n\n const onTouchEnd = () => {\n const distance = isVertical.value ? lengthY.value : lengthX.value;\n\n if (distance < -SWIPE_THRESHOLD) {\n move(-1, 'touch');\n } else if (distance > SWIPE_THRESHOLD) {\n move(1, 'touch');\n } else {\n move(currentIndex.value as number, 'touch', true);\n }\n startAutoplay();\n };\n\n const onTransitionstart = (event: TransitionEvent) => {\n emit('transitionenter', event);\n };\n\n const onTransitionend = (event: TransitionEvent) => {\n emit('transitionleave', event);\n };\n\n const addChild = (item: SwiperItemInstance) => {\n items.value.push(item);\n };\n\n const removeChild = (uid: number) => {\n const removedIndex = items.value.findIndex((item) => item.uid === uid);\n if (removedIndex === -1) return;\n\n items.value.splice(removedIndex, 1);\n\n // 如果删除后没有项了,重置索引\n if (items.value.length === 0) {\n innerSetCurrent(0);\n return;\n }\n\n // 根据删除位置调整当前索引\n if (removedIndex < currentIndex.value) {\n // 删除的是前面的项,当前索引需要 -1(保持显示相同内容)\n innerSetCurrent(currentIndex.value - 1);\n } else if (removedIndex === currentIndex.value && currentIndex.value >= items.value.length) {\n // 删除的是当前项,且索引已越界,调整到最后一项\n innerSetCurrent(items.value.length - 1);\n }\n\n updateItemPosition();\n };\n\n const updateItemPosition = () => {\n if (!items.value.length) return;\n items.value.forEach((item, index) => {\n item.calcTranslateStyle(index, currentIndex.value);\n });\n };\n\n const setContainerHeight = (height: number | string) =>\n (containerHeight.value = isNumber(height) ? `${height}px` : height);\n\n const updateContainerHeight = () => {\n if (props.height) {\n setContainerHeight(props.height);\n return;\n }\n\n const target = items.value[currentIndex.value ?? 0];\n const rect = target?.proxy?.$el.getBoundingClientRect();\n if (rect) {\n setContainerHeight(rect.height);\n }\n };\n\n watch(currentIndex, updateContainerHeight);\n watch(\n () => props.current,\n (val, oldVal) => {\n // v-model动态更新时不触发move逻辑\n if (val === previous.value) return;\n stopAutoplay();\n move(val - oldVal, 'autoplay', false, val);\n startAutoplay();\n },\n );\n\n provide('parent', {\n loop: props.loop,\n root,\n items,\n isVertical,\n addChild,\n removeChild,\n setContainerHeight,\n moveDirection,\n });\n\n onMounted(() => {\n startAutoplay();\n updateItemPosition();\n updateContainerHeight();\n });\n\n onUnmounted(() => {\n stopAutoplay();\n });\n\n const swipeTo = (index: number, options?: { immediate?: boolean }) => {\n if (index < 0 || index >= items.value.length) return;\n\n const step = index - currentIndex.value;\n if (step === 0) return;\n\n stopAutoplay();\n\n if (options?.immediate) {\n // 立即切换:直接更新索引和位置,无动画\n processIndex(index, 'autoplay');\n updateItemPosition();\n } else {\n // 带动画切换:复用现有的 move 逻辑\n move(step, 'autoplay', false, index);\n }\n\n startAutoplay();\n };\n\n expose({\n swipeTo,\n });\n\n // 渲染控制按钮(左右箭头)\n const renderControlsNav = () => {\n if (isVertical.value || !navigationConfig.value?.showControls) return null;\n\n return (\n <span class={`${swiperNavClass.value}__btn`}>\n <span class={`${swiperNavClass.value}__btn--prev`} onClick={() => goPrev('nav')} />\n <span class={`${swiperNavClass.value}__btn--next`} onClick={() => goNext('nav')} />\n </span>\n );\n };\n\n // 渲染点状导航\n const renderDotsNav = () => {\n const navType = navigationConfig.value.type;\n if (!navType || !['dots', 'dots-bar'].includes(navType)) return null;\n\n return (\n <>\n {items.value.map((_, index) => (\n <span\n key={`page${index}`}\n class={[\n `${swiperNavClass.value}__${navType}-item`,\n index === currentIndex.value && `${swiperNavClass.value}__${navType}-item--active`,\n `${swiperNavClass.value}__${navType}-item--${props.direction}`,\n ]}\n />\n ))}\n </>\n );\n };\n\n // 渲染分式导航 (1/5)\n const renderFractionNav = () => {\n if (navigationConfig.value?.type !== 'fraction') return null;\n return <span>{`${(currentIndex.value ?? 0) + 1}/${items.value.length}`}</span>;\n };\n\n // 渲染导航类型(dots/fraction)\n const renderTypeNav = () => {\n if (!('type' in navigationConfig.value)) return null;\n\n return (\n <span\n class={[\n `${swiperNavClass.value}--${props.direction}`,\n `${swiperNavClass.value}__${navigationConfig.value.type || ''}`,\n `${swiperNavClass.value}--${navigationConfig.value.paginationPosition || 'bottom'}`,\n `${swiperNavClass.value}--${navigationConfig.value.placement}`,\n ]}\n >\n {renderDotsNav()}\n {renderFractionNav()}\n </span>\n );\n };\n\n return () => {\n const swiperNav = () => {\n if (props.navigation === false) return null;\n\n if (enableBuiltinNavigation.value) {\n return (\n <>\n {renderControlsNav()}\n {renderTypeNav()}\n </>\n );\n }\n\n if (typeof props.navigation === 'function') return (props.navigation as Function)();\n\n if (slots?.navigation) return slots.navigation();\n\n return null;\n };\n\n return (\n <div ref={root} class={rootClass.value}>\n <div\n ref={swiperContainer}\n class={`${swiperClass.value}__container`}\n style={{\n flexDirection: isVertical.value ? 'column' : 'row',\n transition: animating.value ? `transform ${props.duration}ms` : 'none',\n transform: translateContainer.value,\n height: containerHeight.value,\n }}\n onTransitionstart={onTransitionstart}\n onTransitionend={(event: TransitionEvent) => {\n if (event.target === event.currentTarget) {\n onTransitionend(event);\n handleAnimationEnd();\n }\n }}\n onClick={onItemClick}\n >\n {renderTNodeJSX('default')}\n </div>\n {swiperNav()}\n </div>\n );\n };\n },\n});\n"],"names":["DEFAULT_SWIPER_NAVIGATION","paginationPosition","placement","showControls","type","SWIPE_THRESHOLD","prefix","config","defineComponent","name","props","_objectSpread","disabled","Boolean","default","emits","setup","_ref","_currentIndex$value","emit","expose","slots","swiperClass","usePrefixClass","swiperNavClass","renderTNodeJSX","useTNodeJSX","setOffset","offset","direction","arguments","length","undefined","translateContainer","value","concat","root","ref","items","_toRefs","toRefs","current","modelValue","_useVModel","useVModel","defaultCurrent","_useVModel2","_slicedToArray","currentIndex","setCurrent","swiperContainer","previous","animating","isSwiperDisabled","computed","isVertical","containerHeight","moveDirection","navigationConfig","navigation","_typeof","enableBuiltinNavigation","Object","keys","minShowNum","isBottomPagination","_navigationConfig$val","rootClass","_defineProperty","autoplayTimer","onItemClick","_props2$onClick","_currentIndex$value2","onClick","move","step","source","_root$value","_root$value2","isReset","targetValue","nextIndex","loop","updateItemPosition","innerTargetValue","processIndex","moveDir","distance","handleAnimationEnd","stopAutoplay","clearInterval","startAutoplay","autoplay","setInterval","goNext","interval","goPrev","innerSetCurrent","val","index","max","_useSwipe","useSwipe","onSwipeStart","onSwipe","e","onTouchMove","onSwipeEnd","onTouchEnd","lengthX","lengthY","event","preventDefault","curIndex","maxIndex","dir","onTransitionstart","onTransitionend","addChild","item","push","removeChild","uid","removedIndex","findIndex","splice","forEach","calcTranslateStyle","setContainerHeight","height","isNumber","updateContainerHeight","_currentIndex$value3","_target$proxy","target","rect","proxy","$el","getBoundingClientRect","watch","oldVal","provide","onMounted","onUnmounted","swipeTo","options","immediate","renderControlsNav","_navigationConfig$val2","_createVNode","renderDotsNav","navType","includes","_Fragment","map","_","renderFractionNav","_navigationConfig$val3","_currentIndex$value4","renderTypeNav","swiperNav","flexDirection","transition","duration","transform","currentTarget"],"mappings":"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"}