仅在Flash中使用鼠标滚轮滚动。防止鼠标滚轮触发浏览器默认滚动行为。

4
我发现这个问题是在火狐自动更新到FF17之后出现的,我的操作系统是MAC,OSX 10.8.2。
有什么建议和技巧吗? 问题:
我使用javascript中的preventDefault()和stopPropagation()来取消鼠标滚轮的默认滚动事件,它可以正常工作。但是当鼠标悬停在Flash对象上并使用鼠标滚轮时,它就不能工作了。
事实上,我在Flash中有一个面板,可以通过鼠标滚轮进行控制。Flash对象嵌入在html文档的中间,你需要向下滚动浏览器才能查看flash内容。当我专注于flash内容并通过鼠标滚轮滚动时,浏览器也在滚动,并使flash内容超出视野范围。 复现问题:
1. 在html的底部放置一个简单的空白Flash对象。确保你需要向下滚动浏览器才能查看Flash对象。
  1. 为了便于解释,您可以使用此JavaScript停止页面上所有鼠标滚轮活动: (如果需要,请按“空格键”到达html底部的flash对象。) window.addEventListener('DOMMouseScroll', wheel, false); window.addEventListener('mousewheel', wheel, false); window.addEventListener('MozMousePixelScroll', wheel, false); window.addEventListener('wheel', wheel, false); function cancelEvent(e) { e = e ? e : window.event; if (e.stopPropagation)e.stopPropagation(); if (e.preventDefault)e.preventDefault(); e.cancelBubble = true; e.cancel = true; e.returnValue = false; return false; }
  2. 将鼠标滚轮悬停在Flash对象上并使用它,您会发现浏览器也在滚动。
预期结果:
通过上述脚本,鼠标滚轮只能控制Flash对象,而不能控制浏览器。

@MuratÇorlu 不是的... 我已经将其报告给Mozilla作为一个bug,但当时没有得到回复。 - Mister Deer
3个回答

1
我发现一个网站,整个订单流程都在Flash对象中,但该对象是固定大小的,不适合我的笔记本屏幕。他们禁用了Flash对象内外的滚动条,也就是整个页面。这是一种非常恼人的用户体验,我必须将鼠标指针移到最右边,使用浏览器滚动条而不是鼠标滚轮。如果您访问 "https://internetorder.dominos.com.au/estore/"(除主页之外的任何页面),是否有类似的情况?如果是,则可能会给您的用户带来困扰。并不代表我以任何方式支持这样做。

更新:我之前评论中提到的网站已经替换了Flash,现在已经不再相关。 - Skip R

0
我创建了一个处理一切的小型库。在默认的Flash播放器插件、Pepper Flash和MAC-OS上,它都运行得非常完美(就我测试的范围而言)。而且你不需要将任何.js文件添加到你的HTML文件夹中。 GIhub repo

0

你需要使用JavaScript来覆盖默认的鼠标滚轮行为。第一个链接有许多不同浏览器的示例,但我在第二个例子中在现代IE的实现中更为成功。

http://www.stoimen.com/blog/2009/07/01/javascript-disable-mouse-wheel/

http://solidlystated.com/scripting/javascript-disable-mouse-wheel/

但我不太确定你为什么需要这个。如果您将Flash应用程序设置为与屏幕大小相同并缩放内部内容,则无法滚动页面。只需将Flash的宽度和高度设置为100%即可。


谢谢您的回复。但是在Firefox 17中仍然存在一些问题。 - Mister Deer
我的Flash对象将被嵌入到第三方网站中,需要将Flash对象的大小适配提供的皮肤。 - Mister Deer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接