UNPKG

tdesign-vue-next

Version:
1 lines 22.1 kB
{"version":3,"file":"dep-dd656b14.mjs","sources":["../../../common/js/image-viewer/transform.ts","../../../components/image-viewer/hooks/index.ts"],"sourcesContent":["import { positiveAdd, positiveSubtract } from '../input-number/number';\nimport type { ZoomOptions, ZoomResult, TranslateOffset, ImageScale } from './types';\n\nexport type { ZoomOptions, ZoomResult, TranslateOffset, ImageScale };\n\n/** ImageScale 的默认值,所有使用处应引用此常量,避免多处声明不一致 */\nexport const DEFAULT_IMAGE_SCALE: ImageScale = {\n max: 2,\n min: 0.5,\n step: 0.2,\n defaultScale: 1,\n};\n\n/**\n * 检测图片是否超出视口(容器)边界\n * @param container 外层容器元素\n * @param modalBox 图片包裹元素\n */\nexport const isImageExceedsViewport = (container: HTMLElement, modalBox: HTMLElement): boolean => {\n const containerRect = container.getBoundingClientRect();\n const modalRect = modalBox.getBoundingClientRect();\n return (\n modalRect.left < containerRect.left ||\n modalRect.right > containerRect.right ||\n modalRect.top < containerRect.top ||\n modalRect.bottom > containerRect.bottom\n );\n};\n\n/** 镜像默认值(未镜像) */\nexport const MIRROR_DEFAULT = 1;\n\n/** 切换镜像状态:1 → -1,-1 → 1 */\nexport const toggleMirror = (current: number): number => (current > 0 ? -1 : 1);\n\n/** 每次旋转的角度(逆时针 90°) */\nexport const ROTATE_DEG = -90;\n\n/**\n * 计算最短路径归零的旋转补偿值\n * 用于 resetRotate 场景:避免 CSS transition 时图片\"倒转一大圈\"\n *\n * @param currentDeg 当前累计旋转角度\n * @returns 需要减去的补偿值(rotate.value -= 返回值 即可归零)\n *\n * @example\n * // currentDeg = -270 → return 90(-270 - 90 = -360 ≡ 0°)\n * // currentDeg = -180 → return -180(-180 - (-180) = 0)\n * // currentDeg = 0 → return 0(无需旋转)\n */\nexport function calcResetRotation(currentDeg: number): number {\n const degreeToRotate = currentDeg % 360;\n if (degreeToRotate === 0) return 0;\n // 找最短方向旋转回 0°\n return Math.abs(degreeToRotate) > 180 ? (degreeToRotate + 360) % 360 : degreeToRotate;\n}\n\n/** 将缩放值限制在 [min, max] 范围内 */\nexport function clampScale(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\n/**\n * 计算放大后的新 scale 值(使用精确浮点数加法)\n * @returns clamp 后的新 scale 值\n */\nexport function calcZoomInScale(oldScale: number, step: number, min: number, max: number): number {\n return clampScale(positiveAdd(oldScale, step), min, max);\n}\n\n/**\n * 计算缩小后的新 scale 值(使用精确浮点数减法)\n * @returns clamp 后的新 scale 值\n */\nexport function calcZoomOutScale(oldScale: number, step: number, min: number, max: number): number {\n return clampScale(positiveSubtract(oldScale, step), min, max);\n}\n\n/**\n * 计算缩放后的位移补偿\n * 公式:newTranslate = scaleRatio * T + (1 - scaleRatio) * Z\n * 其中 Z 为缩放中心,T 为当前位移,scaleRatio = newScale / oldScale\n */\nexport function calculateTranslateOffset(\n oldScale: number,\n newScale: number,\n options?: ZoomOptions\n): TranslateOffset | undefined {\n if (options?.mouseOffsetX == null || options?.mouseOffsetY == null) {\n return undefined;\n }\n\n const scaleRatio = newScale / oldScale;\n const { translateX = 0, translateY = 0 } = options?.currentTranslate ?? {};\n const { mouseOffsetX, mouseOffsetY } = options;\n\n return {\n translateX: scaleRatio * translateX + (1 - scaleRatio) * mouseOffsetX,\n translateY: scaleRatio * translateY + (1 - scaleRatio) * mouseOffsetY,\n };\n}\n\n/**\n * 执行一次 zoom in 并计算位移补偿\n * @returns { newScale, zoomResult }\n */\nexport function zoomIn(\n oldScale: number,\n step: number,\n min: number,\n max: number,\n options?: ZoomOptions\n): { newScale: number; zoomResult: ZoomResult } {\n const newScale = calcZoomInScale(oldScale, step, min, max);\n return {\n newScale,\n zoomResult: { newTranslate: calculateTranslateOffset(oldScale, newScale, options) },\n };\n}\n\n/**\n * 执行一次 zoom out 并计算位移补偿\n * @returns { newScale, zoomResult }\n */\nexport function zoomOut(\n oldScale: number,\n step: number,\n min: number,\n max: number,\n options?: ZoomOptions\n): { newScale: number; zoomResult: ZoomResult } {\n const newScale = calcZoomOutScale(oldScale, step, min, max);\n return {\n newScale,\n zoomResult: { newTranslate: calculateTranslateOffset(oldScale, newScale, options) },\n };\n}\n","import {\n ROTATE_DEG,\n calcResetRotation,\n toggleMirror,\n MIRROR_DEFAULT,\n clampScale,\n zoomIn,\n zoomOut,\n} from '@tdesign/common-js/image-viewer/transform';\nimport type { ZoomOptions, ZoomResult, TranslateOffset } from '@tdesign/common-js/image-viewer/transform';\nimport { ref } from 'vue';\nimport { throttle } from 'lodash-es';\nimport { ImageScale } from '../type';\nimport { DEFAULT_IMAGE_SCALE } from '@tdesign/common-js/image-viewer/transform';\n\n// 从 common 包重新导出类型,保持向后兼容\nexport type { ZoomOptions, ZoomResult, TranslateOffset };\n\ninterface InitTransform {\n translateX: number;\n translateY: number;\n}\n\n/**\n * 从 MouseEvent 或 TouchEvent 中提取统一的坐标\n */\nfunction getEventCoords(e: MouseEvent | TouchEvent): { pageX: number; pageY: number } | undefined {\n if ('touches' in e) {\n // touch 事件:仅处理单指拖拽\n const touch = e.touches[0] || e.changedTouches[0];\n return touch ? { pageX: touch.pageX, pageY: touch.pageY } : undefined;\n }\n return { pageX: (e as MouseEvent).pageX, pageY: (e as MouseEvent).pageY };\n}\n\nexport function useDrag(initTransform: InitTransform) {\n const transform = ref(initTransform);\n\n const pointerDownHandler = (e: MouseEvent | TouchEvent) => {\n // 鼠标事件只处理左键\n if ('button' in e && e.button !== 0) return;\n\n const startCoords = getEventCoords(e);\n if (!startCoords) return;\n const { pageX: startX, pageY: startY } = startCoords;\n const { translateX, translateY } = transform.value;\n\n const moveHandler = (e: MouseEvent | TouchEvent) => {\n const coords = getEventCoords(e);\n if (!coords) return;\n transform.value = {\n translateX: translateX + coords.pageX - startX,\n translateY: translateY + coords.pageY - startY,\n };\n };\n\n const removeHandler = () => {\n document.removeEventListener('mousemove', moveHandler);\n document.removeEventListener('mouseup', upHandler);\n document.removeEventListener('mouseleave', leaveHandler);\n document.removeEventListener('touchmove', moveHandler);\n document.removeEventListener('touchend', upHandler);\n document.removeEventListener('touchcancel', upHandler);\n };\n\n const upHandler = () => removeHandler();\n const leaveHandler = () => removeHandler();\n\n document.addEventListener('mousemove', moveHandler);\n document.addEventListener('mouseup', upHandler);\n document.addEventListener('mouseleave', leaveHandler);\n // touch 事件:passive: false 以支持在需要时 preventDefault\n document.addEventListener('touchmove', moveHandler, { passive: false });\n document.addEventListener('touchend', upHandler);\n document.addEventListener('touchcancel', upHandler);\n };\n\n const resetTransform = () => {\n transform.value = { ...initTransform };\n };\n\n // 保持向后兼容:mouseDownHandler 指向同一个 handler\n return { transform, mouseDownHandler: pointerDownHandler, pointerDownHandler, resetTransform };\n}\n\nexport function useMirror() {\n const mirror = ref(MIRROR_DEFAULT);\n const onMirror = () => {\n mirror.value = toggleMirror(mirror.value);\n };\n const resetMirror = () => {\n mirror.value = MIRROR_DEFAULT;\n };\n\n return { mirror, onMirror, resetMirror };\n}\n\nexport function useScale(imageScale: Partial<ImageScale> | undefined) {\n const { max, min, step, defaultScale: rawDefault } = { ...DEFAULT_IMAGE_SCALE, ...imageScale };\n const defaultScale = clampScale(rawDefault, min, max);\n const scale = ref(defaultScale);\n const lastZoomResult = ref<ZoomResult>({});\n let pinchDistance = 0;\n\n // --- 节流(50ms,leading-only):防止高频滚轮/触摸过度触发 ---\n const doZoomIn = throttle(\n (options: ZoomOptions | undefined) => {\n const { newScale, zoomResult } = zoomIn(scale.value, step, min, max, options);\n scale.value = newScale;\n lastZoomResult.value = zoomResult;\n },\n 50,\n { leading: true, trailing: false },\n );\n\n const doZoomOut = throttle(\n (options: ZoomOptions | undefined) => {\n const { newScale, zoomResult } = zoomOut(scale.value, step, min, max, options);\n scale.value = newScale;\n lastZoomResult.value = zoomResult;\n },\n 50,\n { leading: true, trailing: false },\n );\n\n const onZoomIn = (options?: ZoomOptions): ZoomResult => {\n const prevScale = scale.value;\n doZoomIn(options);\n // 被节流丢弃或已达边界 → 返回空结果,避免调用方使用过期的位移数据\n if (scale.value === prevScale) return {};\n return lastZoomResult.value;\n };\n\n const onZoomOut = (options?: ZoomOptions): ZoomResult => {\n const prevScale = scale.value;\n doZoomOut(options);\n // 被节流丢弃或已达边界 → 返回空结果,避免调用方使用过期的位移数据\n if (scale.value === prevScale) return {};\n return lastZoomResult.value;\n };\n\n const resetScale = () => {\n scale.value = defaultScale;\n };\n\n // 双指触摸缩放(pinch-to-zoom),与 React 端保持一致\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length !== 2) return;\n e.preventDefault();\n const [touch1, touch2] = Array.from(e.touches);\n pinchDistance = Math.hypot(touch2.pageX - touch1.pageX, touch2.pageY - touch1.pageY);\n };\n\n const onTouchMove = (e: TouchEvent) => {\n if (e.touches.length !== 2) return;\n e.preventDefault();\n const [touch1, touch2] = Array.from(e.touches);\n const currentDistance = Math.hypot(touch2.pageX - touch1.pageX, touch2.pageY - touch1.pageY);\n if (currentDistance > pinchDistance) {\n onZoomIn();\n } else {\n onZoomOut();\n }\n pinchDistance = currentDistance;\n };\n\n const onTouchEnd = () => {\n pinchDistance = 0;\n };\n\n return { scale, onZoomIn, onZoomOut, resetScale, onTouchStart, onTouchMove, onTouchEnd };\n}\n\nexport function useRotate() {\n const rotate = ref(0);\n\n const onRotate = () => {\n rotate.value += ROTATE_DEG;\n };\n const resetRotate = () => {\n const adjusted = calcResetRotation(rotate.value);\n if (adjusted !== 0) {\n rotate.value -= adjusted;\n }\n };\n\n return { rotate, onRotate, resetRotate };\n}\n"],"names":["DEFAULT_IMAGE_SCALE","max","min","step","defaultScale","isImageExceedsViewport","container","modalBox","containerRect","getBoundingClientRect","modalRect","left","right","top","bottom","MIRROR_DEFAULT","toggleMirror","current","ROTATE_DEG","calcResetRotation","currentDeg","degreeToRotate","Math","abs","clampScale","value","calcZoomInScale","oldScale","positiveAdd","calcZoomOutScale","positiveSubtract","calculateTranslateOffset","newScale","options","_options$currentTrans","mouseOffsetX","mouseOffsetY","scaleRatio","_ref","currentTranslate","_ref$translateX","translateX","_ref$translateY","translateY","zoomIn","zoomResult","newTranslate","zoomOut","getEventCoords","e","touch","touches","changedTouches","pageX","pageY","useDrag","initTransform","transform","ref","pointerDownHandler","button","startCoords","startX","startY","_transform$value","moveHandler","coords","removeHandler","document","removeEventListener","upHandler","leaveHandler","addEventListener","passive","resetTransform","_objectSpread","mouseDownHandler","useMirror","mirror","onMirror","resetMirror","useScale","imageScale","_DEFAULT_IMAGE_SCALE$","rawDefault","scale","lastZoomResult","pinchDistance","doZoomIn","throttle","_zoomIn","leading","trailing","doZoomOut","_zoomOut","onZoomIn","prevScale","onZoomOut","resetScale","onTouchStart","length","preventDefault","_Array$from","Array","from","_Array$from2","_slicedToArray","touch1","touch2","hypot","onTouchMove","_Array$from3","_Array$from4","currentDistance","onTouchEnd","useRotate","rotate","onRotate","resetRotate","adjusted"],"mappings":"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"}