交互与命中
指针命中必须回答:client 点落到哪个节点、落在该节点局部用户空间的哪里。生产换算永远是 client → inverse(getScreenCTM)。不要用 offsetX 当用户单位。
几何怎么建见 02 标记与几何工程。CTM 定义见 用户坐标系与变换。
文档清单
| 文档 | 解决的问题 |
|---|---|
| 指针事件与 elementFromPoint | DOM 命中 vs isPointInFill;pointer-events;opacity: 0 |
| getScreenCTM 与坐标变换 | 生产换算;getCTM 不含外层 HTML CSS transform |
| 相机与锚点缩放 | 改 viewBox;锚点公式;不要 CSS scale 整棵树 |
| 指针状态机与捕获 | pointerId、setPointerCapture;不要 movementX 累加 |
| 框选多选与变换手柄 | 橡皮筋屏幕空间、命中用户空间;non-scaling-stroke |
| Overlay 与 HTML 叠加 | 输入框叠在 SVG 上;getScreenCTM 对齐 |
| SVG 无障碍 | title / desc、role;可交互图不要做成 img |
约定
isPointInFill/isPointInStroke的点在 元素局部用户空间。getCTM()/getScreenCTM()的 IDL 是DOMMatrix | null。不在渲染树就不要算。vector-effect生产只用non-scaling-stroke(手柄描边、网格)。- 用户空间 = viewBox 用户单位。
权威资料
核对日期:2026-08-26