为什么 Firefox 不将所有鼠标滚轮事件传递到我的 JavaScript 应用程序?
我正在使用 protovis 库(http://mbostock.github.com/protovis/)来绘制图表。
我上传了我正在使用的代码,以防有人想看一下:
http://jsfiddle.net/zobel/brEAD/
这是我的问题:在 Firefox 下,当我使用鼠标滚轮放大或缩小,一些鼠标滚轮事件不是由我的应用程序捕获,而是由 Firefox 本身捕获。结果是我最终得到了缩放和页面滚动的混合。您可以通过缩小 Firefox 窗口直到滚动条可见来测试这一点。
Opera下不会出现这个问题。为什么会发生这种情况以及如何解决?
预先非常感谢。
I'm using the protovis library (http://mbostock.github.com/protovis/) to draw a graph.
I uploaded the code I'm using in case someone wants to take a look at it:
http://jsfiddle.net/zobel/brEAD/
Here is my problem: Under Firefox, when I use the mouse wheel to zoom in or out, some mouse wheel events are not captured by my application but by Firefox itself. The result is that i end up getting a mix of zooms and page scrolls. You can test this by shrinking the Firefox window until the scroll bar gets visible.
This problem does not occur under Opera. Why does it happen and how can I solve it?
Thanks a lot in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可能是 JavaScript 库中的错误(或简单的遗漏)。该库需要在
preventDefault()
href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll" rel="nofollow">DOMMouseScroll
事件。由于事件冒泡,您可以自己在作为图的父节点的任何 DOM 对象上执行此操作。这是一个简单的例子:
这在旧版本的 IE 中不起作用,因为它不支持
addEventListener
,但您明白了。我建议使用另一个通用 JavaScript 库(如 jQuery),并使用它来设置事件处理程序。May be a bug (or simple omission) in the JavaScript library. The library needs to
preventDefault()
on theDOMMouseScroll
event.Thanks to event bubbling, you can do this yourself on any DOM object that's a parent node of the graph. Here's one simple example:
This won't work in older versions of IE, since it doesn't support
addEventListener
, but you get the point. I recommend using another general-purpose JavaScript library (like jQuery), and use that to set your event handler.