Files
ElyOffice/tasks/reviews/S4-r1.md
T

3.1 KiB
Raw Blame History

FAIL

site/src/touch.ts:35 — 鼠标移出会清掉仍然有效的键盘焦点反馈,违反 S4 的“焦点可见”。复现:1280×1000、减少动效开启,Tab 聚焦 ElyDoc,再将鼠标移入该建筑并移出;activeElement 仍为 ElyDoc 链接,caption opacity 已变为 0,四个积木的 lifted 全被移除。style.css:63 的链接本身裁成 1×1 像素,截图确认此时全部可见焦点反馈消失。修复方向:分别维护悬停与聚焦状态,以两者的有效状态共同决定显示,并保持聚焦建筑的可见标识。

site/src/touch.ts:34 — 上浮直接改变负责悬停判定的积木位置,底缘进入会触发循环进入、离开,违反 S4 的稳定悬停上浮。复现:1280×1000,从模型外移动到 ElyDoc 底缘 (568.57, 510.96) 后保持鼠标静止;普通动效模式下 600 毫秒内记录到 17 次交替 pointerenter/pointerleave,建筑与名称持续闪动。减少动效模式下则立即触发一次进入和离开,建筑回到原位、名称隐藏,鼠标沿底缘轻移会重复该过程。修复方向:使用位置稳定的命中区域判定整座建筑的悬停,将视觉位移与命中区域分开。

site/src/touch.ts:10 — --step 使用 UNIT / 2,悬停及鼠标按压仅移动半格,违反 S4 的“上浮一格、下沉一格”。iso.ts 定义 UNIT=28,垂直高度同用这一单位。复现:1280×1000、减少动效开启,ElyDoc 积木上浮前后的实际 bounding rect 高度位置差为 14.00598 像素,同一 SVG 比例下一格为 28.01197 像素;鼠标按下只回移这半格。修复方向:交互位移使用模型统一的一格高度,并以实际渲染位移验证。

site/src/touch.ts:44 — Enter 的按压状态被同一次 keydown 产生的原生 click 立即清除,键盘操作没有可见下沉反馈。复现:Tab 聚焦 ElyDoc 后按住 Enter;location.hash 已为 #elydoc,pressed 数量为 0,实际 bounding rect 与聚焦时完全相同,下沉位移为 0。修复方向:让键盘按压状态跟随实际按下与释放,导航点击与视觉按压的结束分别处理,失焦时清理状态。

site/src/touch.ts:37 — 每次 pointerup 都直接导航,缺少有效主按钮按压的判定,会把右键及外部拖入后的释放当成激活。复现:地址 hash 为空时右键 ElyDoc,hash 变为 #elydoc;从 (10,10) 按住鼠标主键,拖入 ElyDoc 的 (580,445) 后释放,同样变为 #elydoc,尽管按压起点位于建筑外。修复方向:仅由在该建筑开始的有效主按钮点击激活,取消或离开时结束手势,并保留键盘链接激活。

site/src/main.ts:38 — S4 交互入口缺少回归测试,当前测试无法发现整个功能被移除。本轮在临时副本独立执行构建及测试,基线构建通过、10 项测试通过;随后删除 touch 的 import 与此处调用,六个链接、悬停、按压及焦点反馈全部消失,构建与同一 10 项测试仍全部通过。现有两份测试仅导入 iso.ts/model.ts。修复方向:增加覆盖实际交互入口、鼠标与键盘状态转换、渲染位移和减少动效的测试,使移除入口及上述缺陷的变异触发失败。