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

Posted

技术标签:

【中文标题】SVG 阻止触摸/鼠标滚轮事件【英文标题】:SVG Blocks Touch/Mousewheel events 【发布时间】:2013-05-04 13:59:49 【问题描述】:

有解决方法吗?我正在运行我自己的自定义滚动条脚本,而不是使用内置的浏览器功能。出于多种原因,我更喜欢将 SVG 用于我的图像元素,但其中一个非常重要的缺陷是触摸或鼠标滑过 svg 会阻止事件,从而使页面滚动停止。这在 svg 可能占据整个文档宽度的移动浏览器上更为明显,在这种情况下,一旦您到达 SVG 元素,用户就无法滚动过去。

我没有在 IE 中测试过,但是在 Chrome 中,触摸命令在 SVG 上不起作用,而在 Firefox 上,鼠标滚轮事件是个问题。我想它都会在 IE 上哈哈。

一个不错的解决方案是以某种方式向我的 SVG 元素添加一个事件,以捕获这些事件并将它们传递给滚动事件。我似乎找不到方法。一个更好的解决方案是以某种方式将文档放在 SVG 上方,这样 SVG 就不会干扰滚动。再次,似乎找不到方法。

我将我的 SVG 元素嵌入到对象标签中,出于各种原因,这很重要。我假设对象标签实际上是罪魁祸首。

【问题讨论】:

这是一种奇怪的行为,SVG 中是否嵌入了任何 javascript?将object pointer-events: none; 添加到您的 CSS 中应该可以解决 Firefox 和 Chrome(但不是 IE)中的问题。 【参考方案1】:

根据 Duopixel 的评论。添加:

object 
    pointer-events: none;

到 css 确实解决了 Firefox 和 Chrome 中的问题。我仍然需要在 IE 中进行测试,但目前这似乎是最好和最简单的解决方案。

解释指针事件属性的好文章可以在http://davidwalsh.name/pointer-events找到

如果上述问题是 IE 中的问题,您可以使用需要捕获指针位置并将其传递给适当元素的 javascript 解决方案。可以在此处找到使用 jQuery 但可以很容易地转换为 vanilla javascript 的工作版本:http://jsbin.com/uhuto/1/edit

【讨论】:

加一个用于发布一个好问题并发布一个更好的答案。

以上是关于SVG 阻止触摸/鼠标滚轮事件的主要内容,如果未能解决你的问题,请参考以下文章

html 禁用鼠标滚轮对网页滚动条的控制怎么实现?

vb如何监视鼠标滚轮事件

JS如何判断鼠标滚轮事件分析

jQuery中有鼠标滚轮事件么?

jQ中鼠标滚轮事件事件吗

js中如何禁用鼠标滚轮事件?急,在线等!