虽然Flash有鼠标滚轮事件(MouseEvent.MOUSE_WHEEL),但它有很多问题。
首先,Mac上尚不支持该事件。所以有一堆solutions,所有这些(基本上)都在javascript中捕获mousewheel(或DOMMouseScroll)事件并将其传递给flash应用程序。幸运的是,在我测试的所有Mac浏览器中,当闪光灯处于全屏模式时,这也适用。
问题2是flash忽略了具有小“增量”的鼠标滚轮事件。例如,Microsoft的IntelliPoint Mice with "Smooth Scroll"会导致此问题。对此的解决方案与mac的解决方案相同...即在浏览器中捕获javascript鼠标滚轮事件并将其传递给应用程序。问题是我测试的Windows浏览器(firefox,即safari和chrome),当闪存处于全屏模式时,它们似乎无法捕获此事件。有谁知道为什么或如何解决这个问题?
我目前有一个混合解决方案,总是从javascript(非全屏模式或全屏模式)中获取事件,除非它在Windows上处于全屏模式(此时它从闪光鼠标滚轮事件中获取)。所以它失败的唯一时间是Windows上的全屏模式,鼠标具有小的增量。有人有完整的解决方案?还是只是一个更好的?
答案 0 :(得分:3)
这是关于adobe的JIRA的一个已知问题。你需要等待修复它,或者使用另一个事件而不是MouseEvent.MOUSE_WHEEL。它不适用于Windows,因为在mac和Linux的Windows中,flash播放器的实现完全不同。 Mac和Linux使用GTK来实现插件Handle。在Windows上,它使用Win32API Common HWND,它将焦点放在全屏模式上,导致在浏览器上不调度滚动事件。在Mac和Linux上,GTK只是将插件大小扩展到桌面大小,而不是真正的全屏。这是这些系统中的GTK行为。什么都做不了。
答案 1 :(得分:0)
您的解决方案是最好的解决方案之一。只有一个更好 - 不要使用鼠标滚轮:(
Adobe应该对它做些什么(并支持其他控制器)。
答案 2 :(得分:0)
MouseEvent.MOUSE_WHEEL似乎在mac上运行良好,因为Gala beta和10.1 final。我可以使用Safari和Chrome中的魔术鼠标和触控板触发鼠标滚轮事件。
答案 3 :(得分:0)
Pixelbreaker's MacMouseWheel已经在Mac上成功全屏滚动,但我暂时没有使用它(例如在Safari 5上)。
缺点是它捕获整个页面的事件,因此即使flash元素只是屏幕上的一个小框,你也会丢失HTML的滚动。
但是当你启用全屏时,你基本上可以在已经构建的内容和macmousewheel.js中使用的内容之间切换。
希望有所帮助,祝你好运。
答案 4 :(得分:0)
您可以尝试在http://blog.earthbrowser.com/2009/01/simple-solution-for-mousewheel-events.html使用简单的AS3类MacMouseWheelHandler,这样您就不必与Javascrpt集成。它从Actionscript中直接注入Javascript。