Skip to content

Commit 2485f8c

Browse files
committed
docs(3d): 补充第三层根因(canvas 被根布局拦截点击)至知识卡片
1 parent 168df42 commit 2485f8c

1 file changed

Lines changed: 12 additions & 1 deletion

File tree

‎docs/knowledge/bugs/2026-08-homepage-3d-duplicate-planets-misaligned-click.md‎

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,23 @@
7676

7777
> 取舍:为了让用户能把行星对应到功能,**牺牲了“新手期后才隐藏副标题”的原设计**。隐喻名保留(品牌),功能名常驻(可用性)。移动端网格/侧边栏仍按新手期门控,如需全导航面一致可后续对齐。
7878
79+
## 后续演进 2(第三层根因:canvas 被根布局拦截点击)
80+
81+
标签修复后内测仍反馈“点击仍无响应”。**`document.elementFromPoint` 复现**:在行星位置取最上层元素,返回的是 AppLayout 根 div(`flex flex-col h-screen overflow-hidden`,`pointer-events:auto`)而非 canvas。
82+
83+
**根因**:canvas 容器原为 `z-index:-10`,落在根 div(z-auto、`h-screen` 铺满全屏)之后。概览模式点击行星时,命中检测先碰到透明的根 div(无点击处理器)→ 点击被吞掉。此前用 `dispatchEvent` 直接打到 canvas 的合成测试绕过了命中检测,造成“点击正常”的假象。
84+
85+
**修复**(`168df42`):canvas 容器 `z-index:-10 → z-0`,位于根 div 空白区之上可接收点击,仍低于所有 UI 浮层(标题栏 z-50 / FunctionalOverlay z-10 / 首页按钮 z-20 / 引导 z-40+ / Radix 弹窗走 portal)。修复后 `elementFromPoint` 在行星位置返回 CANVAS。
86+
7987
## 教训补充
8088

8189
- **“无法对应到功能”优先查标签可发现性**:交互对象可见 ≠ 可用。若对象本身能点击跳转,但用户仍报“不可用”,多半是**缺少可识别的标签**,而非点击逻辑坏了。
82-
- **复现优先于推测**:本轮首轮仅凭代码推测“重复行星”为唯一根因,未复现;直到浏览器截图才看到“无标签”这个真正根因。debug-sop 第二步“复现”不可跳。
90+
- **“点击无响应”用 `elementFromPoint` 查命中**:合成事件(dispatchEvent)会绕过命中检测造成假阳性;必须用 `elementFromPoint` 或真实鼠标事件验证“点击实际落在哪个元素”。透明且 pointer-events:auto 的全屏容器是经典的点击拦截陷阱。
91+
- **负 z-index 的背景层会被根布局挡住点击**:交互式背景(如 3D canvas)不能用负 z-index,否则落到根 div 之后被其透明盒拦截;应置于根 div 之上、UI 浮层之下。
92+
- **复现优先于推测**:本问题有三层根因(重复行星/无标签/canvas 被拦截),首轮仅凭代码推测只命中其一;逐层浏览器复现才全部暴露。debug-sop 第二步“复现”不可跳。
8393

8494
## 相关提交
8595

8696
- `ff67320` fix(3d): 移除晨曦穹顶场景重复的行星系统,导航行星统一由 SpatialNav 渲染
8797
- `b605a6f` fix(3d): 概览模式常驻显示模块标签与功能副标题,解决 3D 物体无法对应到功能
98+
- `168df42` fix(3d): canvas 层级提至 z-0,修复概览模式点击被根布局 div 拦截

0 commit comments

Comments
 (0)