tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 39.6 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 {\n SwiperChangeSource,\n Swiper as TSwiper,\n SwiperItem as TSwiperItem,\n SwiperInstance,\n SwiperToOptions,\n} from '../swiper';\nimport { TdImageViewerProps, ImageInfo, ImageViewerCloseTrigger, ImageSlotParams } 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, expose }) {\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<SwiperInstance>();\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: ImageViewerCloseTrigger) => {\n beforeClose();\n setVisibleValue(false);\n emit('close', { trigger, e });\n };\n\n // 通过(事件委托)将点击事件绑定到组件根,判断点击目标\n const handleClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.tagName === 'IMG') {\n handleClose(e, 'image');\n } else {\n handleClose(e, 'overlay');\n }\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 const swipeTo = (index: number, options?: SwiperToOptions) => {\n swiperRootRef.value?.swipeTo(index, options);\n };\n\n expose({\n swipeTo,\n });\n\n return () => {\n const renderCoverContent = () => {\n const coverContent = renderTNodeJSX('cover');\n if (coverContent) return <div class={`${imageViewerClass.value}__cover`}>{coverContent}</div>;\n };\n\n return (\n <Transition name=\"fade\">\n {visibleValue.value && (\n <div ref={rootRef} class={`${imageViewerClass.value}`} onClick={handleClick}>\n {renderCoverContent()}\n <div class={`${imageViewerClass.value}__mask`} />\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 (() => {\n const imageSlotParams: ImageSlotParams = {\n className: `${imageViewerClass.value}__img`,\n style: `\n transform: ${index === state.touchIndex ? imageTransform.value : 'matrix(1, 0, 0, 1, 0, 0)'};\n ${index === state.touchIndex ? imageTransitionDuration.value : 'transition-duration: 0s;'};\n `,\n src: info.image.url,\n onLoad: (e: Event) => onImgLoad(e, index),\n onTransitionstart: (e: TransitionEvent) => {\n if (e.target === e.currentTarget) {\n onTransitionStart(index);\n }\n },\n onTransitionend: (e: TransitionEvent) => {\n if (e.target === e.currentTarget) {\n onTransitionEnd(index);\n }\n },\n };\n\n const imageContent = renderTNodeJSX('image', { params: imageSlotParams });\n\n if (imageContent) return imageContent;\n\n return <img {...imageSlotParams} />;\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});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","prefix","config","TAP_TIME","defineComponent","name","props","emits","setup","_props2$defaultIndex","emit","_ref","expose","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","handleClick","target","tagName","handleDelete","_currentIndex$value","setImagePreload","nextIndex","preIndex","onSwiperChange","context","setScale","onImgLoad","height","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","swipeTo","options","_swiperRootRef$value","_currentIndex$value2","_props2$images","_props2$images2","_slot","renderCoverContent","coverContent","_createVNode","Transition","default","_default","TSwiper","info","TSwiperItem","imageSlotParams","className","src","onLoad","onTransitionstart","currentTarget","onTransitionend","imageContent","params","onClick","showIndex"],"mappings":"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"}