ImageViewer 放大后支持鼠标拖拽平移(WEB-1062)
版本: 0.5.0 · 类型: ✨ 新功能
问题
放大图片后无法定位到局部区域——图片始终居中,没有平移支持。
改动文件
packages/design/src/components/ImageViewer/ImageViewer.tsxpackages/design/src/components/ImageViewer/__tests__/ImageViewer.test.tsx
改动内容
- 平移状态 — 用
panRef(ref,非 state)存储当前{ x, y }偏移量。拖拽期间直接写 DOM 跳过 React re-render,消除拖拽延迟。isDraggingstate 控制光标和userSelect样式。 - 触发条件 — 仅在
zoom > 1(isPannable)时激活拖拽,光标切换为grab/grabbing。 - 事件绑定 —
<img>上的mousedown开始拖拽;mousemove/mouseup/mouseleave绑定在内容层,防止指针移出图片时拖拽中断。 - 边界约束 — 最大平移量由
offsetWidth * zoom与window.innerWidth的差值推导,图片不会完全移出视口。 - 自动复位 — 切换图片、关闭查看器或缩小到 1× 时平移量自动重置为
{ 0, 0 }。 - Transform — 非零平移使用
translate(x, y) scale(zoom);零平移保持scale(zoom),以兼容已有测试断言。 - 5 条新单测 — grab 光标、平移更新、zoom=1 保护、切图复位、边界约束。