有没有办法检查特定点(X,Y)是否在SVG元素中?

时间:2013-05-15 08:02:07

标签: javascript jquery html svg d3.js

我需要做的是了解鼠标是否离开SVG对象(路径,即它不是矩形 - 不能仅使用偏移,不能使用圆形 - 不能使用半径和中心位置等)。我不能使用鼠标离开/输入事件,因为我有一个鼠标指针,它始终位于所有元素之上。显然我也不能只使用elementFromPoint - 因为它提供了顶层元素。

所以问题是: 有没有办法了解坐标(X,Y)是否在特定元素$(“#element”)中。

UPD:

我将当前的代码上传到我的网站http://pekap.co/example/ 我没有创建jsfiddle,因为我有SVG对象ebmed。 在那里你可以找到我使用的JS,svg对象等。

如果你转到svg对象,它会改变颜色并显示指针(橙色圆圈)。我们的目标是每当我们离开它/进入它时改变SVG区域的颜色,并且仅在SVG区域内的鼠标下显示橙色圆圈。

目前我可以完成其中一个目标(使用不同代码的目标)

UPD 2.

ErikDahlström为我提供了几乎完美的解决方案:在CSS中将指针事件设置为无。我现在就会这样做,但为了让我的日子变得完美,如果有办法检测圆圈的任何部分何时离开SVG区域,那将会很棒。

2 个答案:

答案 0 :(得分:1)

我的建议是创建一个区域的图像地图,它有很多工作,但这似乎是你需要的:http://jsfiddle.net/sb9j7/

<area shape="poly" name="dip" coords="253,102, 277,100, 280,105, 290,107, 295,111, 304,130, 290,140, 287,147, 240,157, 238,159, 227,153, 203,146, 198,125, 200,116, 214,102, 231,102" href="#">

这个小提琴来自image mapster

答案 1 :(得分:1)

我不确定我是否遵循你的意思,指针是鼠标后面的小圆圈?

如果是这样,那么只需将该圆圈设为pointer-events: none,它就会对鼠标事件“透明”。请注意,webkit / safari / chrome / blink尚不支持mouseentermouseleave,因此您可能需要一些基于脚本的解决方法(不确定D3是否已经这样做了)。

还应该可以基于在路径元素上使用CSS :hover规则来执行解决方案。在悬停时将某些属性设置为某个值,然后使用getComputedStyle检查路径元素上当前属性的设置。