裁剪的 SVG 多边形接收鼠标事件

Posted

技术标签:

【中文标题】裁剪的 SVG 多边形接收鼠标事件【英文标题】:Clipped SVG polygon receives mouse events 【发布时间】:2014-04-24 03:09:41 【问题描述】:

以下是事实:

    我有一个带圆角的 div,其中包含一个带圆角的 SVG 元素,可以创建一个圆。

    在圆形 (SVG) 内部,我正在绘制四个多边形,它们构成不同的圆形象限。

    多边形通过改变颜色来响应悬停 - 因此当用户鼠标悬停在圆圈中的特定象限上时 - 它会亮起。

    SVG 和包含 SVG 的 div 都具有 overflow:hidden CSS 指令。

    当我将鼠标悬停在圆外的区域(但在多边形的剪裁矩形内)时,相应的象限会亮起...

为什么即使我将鼠标悬停在剪切区域上,元素也会响应鼠标悬停? 我怎样才能确保这不会发生? (不创建遮挡透明元素 - 我希望能够在下面的图层中触摸某些东西......)。

编辑: 按要求添加小提琴:

http://jsfiddle.net/JVQD8/

在小提琴中 - 请注意周围的 div 以红线为边界。 多边形(蓝色)被红色边框(div)剪裁,当您将鼠标悬停在多边形上时,它会变成较浅的蓝色阴影。 如果在多边形上,多边形会在红色圆圈边框区域之外突出显示。

编辑:

正如 Robert Longson 所说,Firefox 完全没有问题。 然而,在 chrome 中,问题如前所述,而在 IE 中,SVG 多边形甚至没有响应悬停。

所以关于 chrome 的问题仍然存在 - 仅在 chrome 中。我怎么知道这是我应该报告的错误,还是设计的行为差异?

【问题讨论】:

您能准备一个fiddle 来展示这种行为吗? 似乎在 Firefox 上按预期工作。你在测试什么UA?也许这是那个 UA 的错误? 确实它在 Firefox 上按预期工作。 现在在 Chrome 中可以正常工作,但在 Safari 9.1 中却不能。 【参考方案1】:

尝试使用指针事件属性。

https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pointer-events

【讨论】:

试过了。指针事件属性(如您指向的链接中所指定)是指(整个元素的)可见性填充和描边。它不处理剪辑。所描述的问题是多边形被父级裁剪,但响应裁剪区域中的事件。

以上是关于裁剪的 SVG 多边形接收鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

SVG 阻止触摸/鼠标滚轮事件

带有鼠标事件的 Angular 2/4 图像裁剪

如何使 SVG 元素鼠标事件通过另一个元素冒泡?

在对象中的 SVG 元素上捕获鼠标事件,也是它的父容器 div

嵌入在对象元素中的 SVG 上的鼠标指针悬停/jquery 单击事件不起作用

利用百度API画多边形,不能监测到百度绘图鼠标事件