Bug:Mask QC 画笔拖动与滚动条冲突,滚动位置漂移

问题描述

Mask QC 绘图时,画笔拖动与侧边滚动条发生冲突,滚动位置会跳回或漂移;此前叠加 touch-action:none、overflow-anchor:none 等 CSS 限制后仍未解决。

根因(已从当前 index(9).html 确认)

  1. pointerdown 调用 lockCanvasScroll(),记录右侧 .detail.scrollTop 和 window.scrollX/Y。
  2. 每次画笔拖动触发 pointermove 时,都调用 restoreCanvasScroll(),强制把滚动位置恢复到按下鼠标时的快照;其中还会反复执行 window.scrollTo()。
  3. 画布指针捕获、绘图状态和滚动快照耦合,导致绘图期间滚动位置被强行回滚。
  4. 原布局使用 height/min-height: calc(100vh - 67px),假设顶部工具栏始终为 67px;工具栏换行或展开目录设置后,页面高度计算可能产生额外溢出。

修复方案(本地修复版已完成)

回归测试

使用 Chromium + Playwright,以 800×600 测试图片和本地 API 模拟响应,对真实页面 DOM、Pointer Events 和滚动容器执行交互测试:

测试限制:无头 Chromium 使用覆盖式滚动条,因此未能模拟 Windows 系统可见滚动条滑块的物理拖动;需要在 Windows Chrome/Edge 上做最后的人工验收。

验收标准

  1. 按住左键连续涂白、擦黑,笔迹不丢失、不跳点。
  2. 绘图时不再自动修改右侧面板或页面滚动位置。
  3. 直接拖动侧边滚动条时不得误触发画笔。
  4. 空格拖动画布与画笔绘制互不串扰。
  5. 桌面、平板、手机布局均无整页意外漂移。

本次本地修复文件:index(9)_画笔滚动冲突彻底修复.html。该文件已完成上述自动化交互测试;尚未提交到仓库实际页面文件。