我在检测 SVG 路径元素上的鼠标悬停事件时遇到问题。看起来路径元素的描边宽度越小,我检测鼠标悬停的成功率就越低。
此外,我正在使用 jquery-svg 插件来进行绘图。
下面是尝试在路径元素上使用 jquery mouseover 事件进行检测的 fiddle 。 Mouseover Fiddle
下面是尝试通过将 mousemove 监听器附加到 svg,然后使用 document.getElementFromPoint 进行检测的 fiddle 。 getElementFromPoint Fiddle
这些似乎都不能可靠地工作,尤其是在鼠标快速移动的情况下。是否可以提高其中任何一个的灵敏度以更好地检测鼠标悬停?或者也许有更好的方法来做到这一点?
最佳答案
根据浏览器的工作方式,您不会连续收到 mouseover
事件,但每次操作系统更新光标位置时都会收到一个事件。如果鼠标快速移动,您将收到相隔几个像素的事件。鼠标不会在文档上滑动,而是跳跃。 Here's a jsfiddle显示每个事件发生的位置。您无法执行任何操作来获取光标两个连续位置之间的所有元素的 mouseover
事件。
您可以做一些不同的事情:记住 mousemove
事件的先前位置,计算该点与当前鼠标位置之间的线,并计算该线与所有其他形状之间的所有交点在文件中。但这会占用大量资源,因为没有可用的 API,您必须自己计算交集。有一个library这可以帮助你。
关于javascript - SVG 路径 HitTest ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202424/