9

虽然 Flash 有一个鼠标滚轮事件(MouseEvent.MOUSE_WHEEL),但它带来了很多问题。

首先是 Mac 尚不支持该事件。所以有一堆解决方案,所有这些(基本上)都在javascript中捕获鼠标滚轮(或DOMMouseScroll)事件并将其传递给flash应用程序。幸运的是,在我测试过的所有 Mac 浏览器下,这在 flash 处于全屏模式时也有效。

问题 2 是 flash 忽略了具有小“增量”的鼠标滚轮事件。例如,Microsoft 的带有“Smooth Scroll”的 IntelliPoint 鼠标会导致此问题。对此的解决方案与 mac 的解决方案相同...即在浏览器中捕获 javascript 鼠标滚轮事件并将其传递给应用程序。问题是我测试的 Windows 中的浏览器(firefox,即 safari 和 chrome),当 flash 处于全屏模式时,它们似乎没有捕获此事件。有谁知道为什么或如何解决这个问题?

我目前有一个混合解决方案,它总是从 javascript 中获取事件(在非全屏或全屏模式下),除非它在 ​​Windows 上处于全屏模式(此时它从 flash mousewheel 事件中获取它们)。因此,它唯一失败的情况是在 Windows 上使用具有小增量的鼠标处于全屏模式。有人有完整的解决方案吗?或者只是一个更好的?

4

5 回答 5

3

这是 adobe 的 JIRA 上的一个已知问题。您需要等待它们来修复它,或者使用另一个事件来代替 MouseEvent.MOUSE_WHEEL。它不适用于 windows,因为 flash 播放器的实现在 windows 中与 mac 和 linux 完全不同。Mac 和 Linux 使用 GTK 来实现插件 Handle。在 Windows 上,它使用 Win32API Common HWND,它窃取全屏模式的焦点,导致浏览器上滚动事件的不调度。在 Mac 和 Linux 上,GTK 只是将插件大小拉伸到桌面大小,而不是真正的全屏。这是这些系统中的 GTK 行为。什么都做不了。

于 2010-07-02T19:32:57.093 回答
0

您的解决方案是最好的解决方案之一。只有一个更好 - 不要使用鼠标滚轮:(

Adobe 应该对它做点什么(并支持其他控制器)。

于 2009-10-15T13:36:19.657 回答
0

自 Gala beta 和 10.1 最终版以来,MouseEvent.MOUSE_WHEEL 似乎在 mac 上运行良好。我可以在 Safari 和 Chrome 中使用魔术鼠标和触控板触发鼠标滚轮事件。

于 2010-06-16T01:25:04.387 回答
0

Pixelbreaker 的 MacMouseWheel让我在 Mac 上成功地进行了全屏滚动,但我已经有一段时间没有使用它了(例如在 Safari 5 上)。

缺点是它捕获整个页面的事件,因此即使 Flash 元素只是屏幕上的一个小框,您也会失去对 HTML 的滚动。

但是当你启用全屏时,你基本上可以在你已经构建的内容和他在 macmousewheel.js 中使用的内容之间切换。

希望有帮助,祝你好运。

于 2010-06-28T06:20:03.860 回答
0

您可以尝试在http://blog.earthbrowser.com/2009/01/simple-solution-for-mousewheel-events.html 上使用简单的 AS3 类 MacMouseWheelHandler,这样您就不必与 Javascrpt 集成。它直接从 Actionscript 注入 Javascript。

于 2011-07-17T17:09:36.873 回答