跳到主要内容

ImageViewer 放大后支持鼠标拖拽平移(WEB-1062)

版本: 0.5.0 · 类型: ✨ 新功能

WEB-1062

问题

放大图片后无法定位到局部区域——图片始终居中,没有平移支持。

改动文件

  • packages/design/src/components/ImageViewer/ImageViewer.tsx
  • packages/design/src/components/ImageViewer/__tests__/ImageViewer.test.tsx

改动内容

  1. 平移状态 — 用 panRef(ref,非 state)存储当前 { x, y } 偏移量。拖拽期间直接写 DOM 跳过 React re-render,消除拖拽延迟。isDragging state 控制光标和 userSelect 样式。
  2. 触发条件 — 仅在 zoom > 1isPannable)时激活拖拽,光标切换为 grab / grabbing
  3. 事件绑定<img> 上的 mousedown 开始拖拽;mousemove / mouseup / mouseleave 绑定在内容层,防止指针移出图片时拖拽中断。
  4. 边界约束 — 最大平移量由 offsetWidth * zoomwindow.innerWidth 的差值推导,图片不会完全移出视口。
  5. 自动复位 — 切换图片、关闭查看器或缩小到 1× 时平移量自动重置为 { 0, 0 }
  6. Transform — 非零平移使用 translate(x, y) scale(zoom);零平移保持 scale(zoom),以兼容已有测试断言。
  7. 5 条新单测 — grab 光标、平移更新、zoom=1 保护、切图复位、边界约束。