tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 37.1 kB
Source Map (JSON)
{"version":3,"file":"image-viewer.mjs","sources":["../../src/image-viewer/image-viewer.tsx"],"sourcesContent":["import { computed, defineComponent, reactive, h, Transition, ref, toRefs, watch, nextTick, onUnmounted } from 'vue';\nimport { CloseIcon, DeleteIcon } from 'tdesign-icons-vue-next';\n\nimport config from '../config';\nimport props from './props';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport { isBrowser } from '../shared';\nimport useGesture, { type DragState, type PinchState } from '../hooks/useGesture';\nimport useVModel from '../hooks/useVModel';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useClass';\n\n// inner components\nimport { SwiperChangeSource, Swiper as TSwiper, SwiperItem as TSwiperItem } from '../swiper';\nimport { TdImageViewerProps, ImageInfo } from './type';\n\nconst { prefix } = config;\n\nconst TAP_TIME = 300;\n\nexport default defineComponent({\n name: `${prefix}-image-viewer`,\n props,\n emits: ['close', 'index-change', 'update:visible', 'update:modelValue', 'update:index', 'delete'],\n setup(props, { emit }) {\n const imageViewerClass = usePrefixClass('image-viewer');\n\n const state = reactive({\n dblTapZooming: false, // double tap zooming\n zooming: false, // pinch zooming\n scale: 1,\n touchIndex: 0,\n dragging: false,\n draggedX: 0,\n draggedY: 0,\n extraDraggedX: 0,\n });\n\n const { index, visible, modelValue } = toRefs(props);\n const [visibleValue, setVisibleValue] = useVModel(visible, modelValue, props.defaultVisible, () => {}, 'visible');\n const [currentIndex, setCurrentIndex] = useDefaultValue(\n index,\n props.defaultIndex ?? 0,\n props.onIndexChange,\n 'index',\n );\n\n // 当前图片和当前图左右两边的图片预加载,以保持预览流畅也节省资源\n const preloadImageIndex = computed(() => {\n const lastIndex = props.images.length - 1;\n // 当 currentIndex 为 0/undefined 时,预加载第一张、第二张、最后一张图片\n if ([undefined, 0].includes(currentIndex.value)) {\n return [0, 1, lastIndex];\n }\n // 当 currentIndex 为最后一张时,预加载最后一张、倒数第二张、第一张图片\n if (currentIndex.value === lastIndex) {\n return [lastIndex, lastIndex - 1, 0];\n }\n // 其他情况下,预加载当前图片、当前图片的前一张、当前图片的后一张\n const prev = currentIndex.value - 1 >= 0 ? currentIndex.value - 1 : lastIndex;\n const next = currentIndex.value + 1 <= lastIndex ? currentIndex.value + 1 : 0;\n return [currentIndex.value, prev, next];\n });\n // 图片列表信息,包含是否需要预加载标志\n const imageInfoList = computed(() => {\n return props.images.map((image, index) => {\n let imageInfo: ImageInfo;\n if (typeof image === 'string') {\n imageInfo = {\n url: image,\n align: 'center',\n };\n } else {\n imageInfo = image;\n }\n return {\n image: imageInfo,\n preload: preloadImageIndex.value.includes(index),\n };\n });\n });\n\n const disabled = ref(false);\n const rootRef = ref();\n const imagesSize: Record<number, { height: number }> = reactive({});\n const swiperRootRef = ref();\n const swiperItemRefs = ref<any[]>([]);\n const gestureRef = ref();\n\n const renderTNodeJSX = useTNodeJSX();\n\n const closeNode = computed(() => renderTNodeJSX('closeBtn', h(CloseIcon)));\n const deleteNode = computed(() => renderTNodeJSX('deleteBtn', h(DeleteIcon)));\n\n const imageTransform = computed(() => {\n const { scale, draggedX, draggedY } = state;\n return `matrix(${scale}, 0, 0, ${scale}, ${draggedX}, ${draggedY})`;\n });\n\n const imageTransitionDuration = computed(() => {\n const { zooming, dragging } = state;\n return zooming || dragging ? 'transition-duration: 0s' : 'transition-duration: 0.3s';\n });\n\n const beforeClose = () => {\n state.dblTapZooming = false;\n state.zooming = false;\n state.scale = 1;\n state.dragging = false;\n state.draggedX = 0;\n state.draggedY = 0;\n state.extraDraggedX = 0;\n };\n\n const handleClose = (e: Event, trigger: string) => {\n beforeClose();\n setVisibleValue(false);\n emit('close', { trigger, e });\n };\n\n const handleDelete = () => {\n emit('delete', currentIndex.value ?? 0);\n };\n\n // 设置当前索引图片上一张、下一张预加载\n const setImagePreload = (index: number) => {\n const nextIndex = index >= imageInfoList.value.length - 1 ? 0 : index + 1;\n const preIndex = index <= 0 ? imageInfoList.value.length - 1 : index - 1;\n imageInfoList.value[preIndex].preload = true;\n imageInfoList.value[nextIndex].preload = true;\n };\n\n const onSwiperChange = (index: number, context: { source: SwiperChangeSource }) => {\n if (currentIndex.value !== index) {\n const trigger = currentIndex.value < index ? 'next' : 'prev';\n setCurrentIndex(index, { trigger });\n setScale(1);\n setImagePreload(index);\n }\n };\n\n const onImgLoad = (e: Event, index: number) => {\n const { height } = e.target as HTMLImageElement;\n imagesSize[index] = { height };\n };\n\n const getMaxDraggedX = () => {\n const rootOffsetWidth = rootRef.value?.offsetWidth || 0;\n const scaledWidth = state.scale * rootOffsetWidth;\n return Math.max(0, (scaledWidth - rootOffsetWidth) / 2);\n };\n\n const getMaxDraggedY = (index: number) => {\n const rootOffsetHeight = rootRef.value?.offsetHeight || 0;\n // 当前图片高度\n const currentImageHeight = imagesSize?.[index]?.height || 0;\n // 当前图片Scaled后总高度\n const currentImageScaledHeight = state.scale * currentImageHeight;\n // 当前图片Scaled后总高度与原图片高度差值的一半,作为图片Scaled后top和bottom的增量(scale是以图片中心点进行的,align为start和end时会影响)\n const halfScaleHeight = (currentImageScaledHeight - currentImageHeight) / 2;\n if (currentImageScaledHeight <= rootOffsetHeight) {\n return {\n top: 0,\n bottom: 0,\n };\n }\n // 图片和外层root元素高度差\n const diffHeight = currentImageScaledHeight - rootOffsetHeight;\n const centerDraggedY = diffHeight / 2;\n // 图片align配置对应的滚动区域\n const alignmentDraggedY = {\n start: {\n top: -diffHeight + halfScaleHeight,\n bottom: halfScaleHeight,\n },\n center: {\n top: -centerDraggedY,\n bottom: centerDraggedY,\n },\n end: {\n top: -halfScaleHeight,\n bottom: diffHeight - halfScaleHeight,\n },\n };\n // 当前图片align值\n const alignment = imageInfoList.value[index]?.image?.align || 'center';\n return alignmentDraggedY[alignment];\n };\n\n const setScale = (scale: number) => {\n scale = Math.min(scale, +props.maxZoom + 1);\n if (scale !== state.scale) {\n state.scale = scale;\n\n if (scale === 1) {\n state.draggedX = 0;\n state.draggedY = 0;\n }\n }\n };\n\n let dragStartTime: number;\n let dblTapTimer: number | null;\n\n const toggleScale = () => {\n const scale = state.scale > 1 ? 1 : 2;\n setScale(scale);\n };\n\n const onTransitionEnd = (index: number) => {\n if (index === state.touchIndex) {\n state.dblTapZooming = false;\n clearTimeout(dblTapTimer);\n dblTapTimer = null;\n }\n };\n\n const onTransitionStart = (index: number) => {\n if (index === state.touchIndex) {\n state.dblTapZooming = true;\n clearTimeout(dblTapTimer);\n }\n };\n\n const checkTap = (e: DragState) => {\n const { event } = e;\n const deltaTime = Date.now() - dragStartTime;\n if (deltaTime < TAP_TIME && isBrowser) {\n if (dblTapTimer) {\n clearTimeout(dblTapTimer);\n dblTapTimer = window.setTimeout(() => {\n clearTimeout(dblTapTimer);\n state.dragging = false;\n toggleScale();\n }, TAP_TIME);\n } else {\n dblTapTimer = window.setTimeout(() => {\n handleClose(event, 'overlay');\n dblTapTimer = null;\n }, TAP_TIME);\n }\n }\n };\n\n const onPinchChange = (scale: number, index: number) => {\n state.zooming = true;\n state.touchIndex = index;\n setScale(scale);\n };\n\n const onPinchEnd = () => {\n state.zooming = false;\n if (state.scale < 1) {\n setScale(1);\n }\n if (state.scale > props.maxZoom) {\n state.scale = +props.maxZoom;\n }\n };\n\n const handlePinch = (pinState: PinchState, index: number) => {\n const {\n last,\n offset: [d],\n } = pinState;\n // 图片未加载完毕,禁止拖拽\n if (!imagesSize?.[index]) return;\n if (state.dblTapZooming) return;\n if (!last) {\n onPinchChange(d, index);\n } else {\n onPinchEnd();\n }\n };\n\n const handleDrag = (dragState: DragState, index: number) => {\n state.touchIndex = index;\n const { setOffset } = swiperRootRef.value || {};\n\n // 图片未加载完毕,禁止拖拽\n if (!imagesSize?.[index]) return;\n const { first, movement, _movement, elapsedTime, tap, offset, overflow, _delta } = dragState;\n if (first) {\n dragStartTime = Date.now();\n }\n\n if (tap && elapsedTime > 0 && elapsedTime < 300) {\n checkTap(dragState);\n return;\n }\n\n // 双击缩放时取消拖拽事件\n if (state.dblTapZooming) {\n dragState?.cancel();\n return;\n }\n\n state.dragging = true;\n\n // 过高图片允许上下滑动\n state.draggedY = offset?.[1] || 0;\n\n if (state.scale === 1) return;\n\n state.draggedX = offset?.[0] || 0;\n\n if (movement[0] !== _movement[0] && overflow[0] !== 0) {\n state.extraDraggedX += _delta[0] / 5;\n setOffset?.(state.extraDraggedX, 'X');\n } else if (state.extraDraggedX !== 0) {\n state.extraDraggedX = 0;\n setOffset?.(state.extraDraggedX, 'X');\n }\n };\n\n const handleDragEnd = (dragState: DragState) => {\n const { overflow, last } = dragState;\n const { goPrev, goNext, swiperContainer } = swiperRootRef.value || {};\n\n state.dragging = false;\n\n if (state.extraDraggedX !== 0 && last) {\n if (Math.abs(state.extraDraggedX) > 50) {\n state.extraDraggedX = 0;\n overflow[0] < 0 ? goNext?.('touch') : goPrev?.('touch');\n return;\n }\n state.extraDraggedX = 0;\n nextTick(() => {\n swiperContainer?.style?.setProperty?.('transform', 'translateX(0)');\n swiperContainer?.style?.setProperty?.('transition', 'transform 0.3s');\n });\n }\n };\n\n const gestureOptions = reactive({\n destroyInvisible: true,\n visible: !!visibleValue.value,\n });\n\n gestureRef.value = useGesture(gestureOptions);\n\n watch(\n () => visibleValue.value,\n (newVal) => (gestureOptions.visible = !!newVal),\n );\n\n watch(\n () => [visibleValue.value, swiperItemRefs.value],\n ([newVisible, newRefs]) => {\n if (!newVisible) return;\n nextTick(() => {\n (newRefs as any[]).forEach?.((item: any, index: number) => {\n const { $el } = item;\n gestureRef.value?.create(\n $el as Element,\n {\n onDrag: (dragState: DragState) => handleDrag(dragState, index),\n onDragEnd: (dragState: DragState) => handleDragEnd(dragState),\n onPinch: (pinchState: PinchState) => handlePinch(pinchState, index),\n },\n {\n drag: {\n from: () => [state.draggedX, state.draggedY],\n pointer: { touch: true },\n bounds: () => ({\n top: getMaxDraggedY(index).top,\n right: getMaxDraggedX(),\n bottom: getMaxDraggedY(index).bottom,\n left: -getMaxDraggedX(),\n }),\n },\n pinch: {\n from: () => [state.scale, 0],\n pointer: { touch: true },\n },\n },\n );\n });\n });\n },\n );\n\n watch(\n () => state.scale,\n (newVal) => (disabled.value = newVal !== 1),\n );\n\n onUnmounted(() => {\n clearTimeout(dblTapTimer);\n });\n\n return () => (\n <Transition name=\"fade\">\n {visibleValue.value && (\n <div ref={rootRef} class={`${imageViewerClass.value}`}>\n <div class={`${imageViewerClass.value}__mask`} onClick={(e) => handleClose(e, 'overlay')} />\n <TSwiper\n ref={swiperRootRef}\n autoplay={false}\n class={`${imageViewerClass.value}__content`}\n height=\"100vh\"\n defaultCurrent={currentIndex.value}\n disabled={disabled.value}\n onChange={onSwiperChange}\n >\n {imageInfoList.value.map((info, index) => (\n <TSwiperItem\n ref={(item: any) => (swiperItemRefs.value[index] = item)}\n key={index}\n class={`${imageViewerClass.value}__swiper-item`}\n style={`touch-action: none; align-items:${info.image.align};`}\n >\n {info.preload ? (\n <img\n src={info.image.url}\n style={`\n transform: ${index === state.touchIndex ? imageTransform.value : 'matrix(1, 0, 0, 1, 0, 0)'};\n ${imageTransitionDuration.value};`}\n class={`${imageViewerClass.value}__img`}\n onLoad={(event: Event) => onImgLoad(event, index)}\n onTransitionstart={(event: TransitionEvent) => {\n if (event.target === event.currentTarget) {\n onTransitionStart(index);\n }\n }}\n onTransitionend={(event: TransitionEvent) => {\n if (event.target === event.currentTarget) {\n onTransitionEnd(index);\n }\n }}\n />\n ) : (\n <span></span>\n )}\n </TSwiperItem>\n ))}\n </TSwiper>\n <div class={`${imageViewerClass.value}__nav`}>\n <div class={`${imageViewerClass.value}__nav-close`} onClick={(e) => handleClose(e, 'close-btn')}>\n {closeNode.value}\n </div>\n\n {props.showIndex && (\n <div class={`${imageViewerClass.value}__nav-index`}>\n {`${Math.min((currentIndex.value ?? 0) + 1, props.images?.length)}/${props.images?.length}`}\n </div>\n )}\n\n <div class={`${imageViewerClass.value}__nav-delete`} onClick={handleDelete}>\n {deleteNode.value}\n </div>\n </div>\n </div>\n )}\n </Transition>\n );\n },\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","prefix","config","TAP_TIME","defineComponent","name","props","emits","setup","_props2$defaultIndex","emit","_ref","imageViewerClass","usePrefixClass","state","reactive","dblTapZooming","zooming","scale","touchIndex","dragging","draggedX","draggedY","extraDraggedX","_toRefs","toRefs","index","visible","modelValue","_useVModel","useVModel","defaultVisible","_useVModel2","_slicedToArray","visibleValue","setVisibleValue","_useDefaultValue","useDefaultValue","defaultIndex","onIndexChange","_useDefaultValue2","currentIndex","setCurrentIndex","preloadImageIndex","computed","lastIndex","images","length","includes","value","prev","next","imageInfoList","map","image","imageInfo","url","align","preload","disabled","ref","rootRef","imagesSize","swiperRootRef","swiperItemRefs","gestureRef","renderTNodeJSX","useTNodeJSX","closeNode","h","CloseIcon","deleteNode","DeleteIcon","imageTransform","concat","imageTransitionDuration","beforeClose","handleClose","e","trigger","handleDelete","_currentIndex$value","setImagePreload","nextIndex","preIndex","onSwiperChange","context","setScale","onImgLoad","height","target","getMaxDraggedX","_rootRef$value","rootOffsetWidth","offsetWidth","scaledWidth","Math","max","getMaxDraggedY","_rootRef$value2","_imagesSize$index","_imageInfoList$value$","rootOffsetHeight","offsetHeight","currentImageHeight","currentImageScaledHeight","halfScaleHeight","top","bottom","diffHeight","centerDraggedY","alignmentDraggedY","start","center","end","alignment","min","maxZoom","dragStartTime","dblTapTimer","toggleScale","onTransitionEnd","clearTimeout","onTransitionStart","checkTap","event","deltaTime","Date","now","isBrowser","window","setTimeout","onPinchChange","onPinchEnd","handlePinch","pinState","last","_pinState$offset","offset","d","handleDrag","dragState","_ref2","setOffset","first","movement","_movement","elapsedTime","tap","overflow","_delta","cancel","handleDragEnd","_ref3","goPrev","goNext","swiperContainer","abs","nextTick","_swiperContainer$styl","_swiperContainer$styl2","_swiperContainer$styl3","_swiperContainer$styl4","style","setProperty","gestureOptions","destroyInvisible","useGesture","watch","newVal","_ref4","_ref5","newVisible","newRefs","_newRefs$forEach","forEach","item","_gestureRef$value","$el","create","onDrag","onDragEnd","onPinch","pinchState","drag","from","pointer","touch","bounds","right","left","pinch","onUnmounted","_currentIndex$value2","_props2$images","_props2$images2","_slot","_createVNode","Transition","default","_default","onClick","TSwiper","info","TSwiperItem","onLoad","onTransitionstart","currentTarget","onTransitionend","showIndex"],"mappings":"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"}