为什么 Firefox 不将所有鼠标滚轮事件传递到我的 JavaScript 应用程序?

发布于 2024-11-18 07:31:06 字数 375 浏览 4 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

逆夏时光 2024-11-25 07:31:06

可能是 JavaScript 库中的错误(或简单的遗漏)。该库需要在 preventDefault() href="https://developer.mozilla.org/en/Gecko-Specific_DOM_Events#DOMMouseScroll" rel="nofollow">DOMMouseScroll 事件。

由于事件冒泡,您可以自己在作为图的父节点的任何 DOM 对象上执行此操作。这是一个简单的例子:

document.body.addEventListener('DOMMouseScroll', function(e){
    e.preventDefault();
}, false);

这在旧版本的 IE 中不起作用,因为它不支持 addEventListener,但您明白了。我建议使用另一个通用 JavaScript 库(如 jQuery),并使用它来设置事件处理程序。

May be a bug (or simple omission) in the JavaScript library. The library needs to preventDefault() on the DOMMouseScroll 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:

document.body.addEventListener('DOMMouseScroll', function(e){
    e.preventDefault();
}, false);

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文