HTML5画布isPointInPath()方法

HTML5画布isPointInPath()方法,html,canvas,Html,Canvas,作为漏斗图的一部分,我在画布上画平行四边形。为了方便点击平行四边形(即漏斗的部分),我存储了坐标并检查了鼠标坐标,以查看鼠标是否在正确的区域。这个很好用 但是现在我遇到了.isPointInPath()方法(只花了四年时间)。因此,我想知道使用这些坐标是否会更快(当然会更容易)来: 1) 重放路径而不抚摸或填充路径,使其不可见 2) 使用此.isPointInPath()方法检查鼠标坐标 当点击发生并开始检查时,可能会有多个段需要检查-例如5。通常根据笔划或图形填充情况,鼠标检测坐标应该改变(从

作为漏斗图的一部分,我在画布上画平行四边形。为了方便点击平行四边形(即漏斗的部分),我存储了坐标并检查了鼠标坐标,以查看鼠标是否在正确的区域。这个很好用

但是现在我遇到了.isPointInPath()方法(只花了四年时间)。因此,我想知道使用这些坐标是否会更快(当然会更容易)来:

1) 重放路径而不抚摸或填充路径,使其不可见 2) 使用此.isPointInPath()方法检查鼠标坐标


当点击发生并开始检查时,可能会有多个段需要检查-例如5。

通常根据笔划或图形填充情况,鼠标检测坐标应该改变(从像素完美的检测角度),因此在重新绘制平行四边形时,应尽可能精确

尽管如此,通常最好的方法是在屏幕外的画布上执行此操作。您可以使用辅助画布逐个重画平行四边形,并检查您的状态,正如您所说的那样。但是,使用此方法时必须非常小心,因为如果点位于画布的当前默认路径中,它将返回true,并且取决于您绘制图形的方式,它可能并不总是按照您的预期执行:)

另一个解决方案是一个接一个地绘制图形,并用于检测鼠标坐标中是否有颜色,这意味着点击了图形。您可以看到一个示例


希望这能有所帮助

确实如此-我在HTML5 rocks(iirc)上的一篇“提高画布速度”文章中提到过二次画布方法-这会在屏幕画布上的图形路径上提供任何速度,但不会抚摸它(因此它不会绘制到屏幕上)?可能会,因为它甚至不需要渲染。然而,对我来说,在您的案例中使用辅助画布的主要原因是,您不要将画布与实际不需要看到的操作弄乱。另外,如果我没记错的话,你提到的那篇文章在实际渲染之前使用了其他画布进行预渲染(做一些计算),所以我想说用例略有不同。谢谢。看看画布规范,接下来的路径可能会使这个问题变得毫无意义。