前端知库

Canvas 图形命中测试应该怎样实现?

用 Path2D、isPointInPath 和坐标转换判断点击图形,理解绘制像素和交互区域不是同一件事。

参考答案

Canvas 不会自动为每个绘制图形创建 DOM 事件目标。交互层需要保存图形的几何数据,使用 Path2D、isPointInPath 或自定义空间索引,根据指针坐标判断命中对象。

命中前要把页面坐标转换到 Canvas 坐标,处理 CSS 缩放、设备像素比、旋转和当前变换矩阵。绘制顺序决定视觉遮挡,命中顺序也要按业务决定是否从上层图形向下层查找。

大量图形时逐个测试会变慢,可以先用包围盒、网格或四叉树缩小候选范围。命中区域还应提供键盘和辅助技术替代,不要让 Canvas 成为唯一交互入口。