1

在 Firefox 3 中,我的 Haxe/Flash 应用程序中的所有 mouseWheel 事件都会触发两次。这似乎只发生在 Windows 版本的 Firefox 中;它不会发生在 IE 或 Opera 中,也不会发生在 Linux 中。

这是一个已知问题,还是我做错了什么?是否有一种不涉及诸如检查用户代理并忽略所有其他事件之类的疯狂的解决方法?

更新:我在旧的 powerbook 上进行了测试(在合并了 pixelbreaker 的 SWFMacMouseWheel 脚本之后),发现虽然 OS X 版本的 Firefox 运行正常,但 Safari (3.2.1) 的事件也增加了一倍。

我还在 AS3 中编写了一个简单的测试,以确保这不是 Haxe 的错;我有同样的行为。代码如下,你可以在这里试试。

package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;

public class Test extends Sprite {
    public function Test() {
        super();
        var tf: TextField = new TextField();
        tf.height = 300;
        addChild(tf);
        stage.addEventListener(MouseEvent.MOUSE_WHEEL,
                   function(e:MouseEvent):void { tf.appendText(e.delta+"\n"); });
    }
}
}
4

2 回答 2

2

尽管我已经多次使用滚动条进行导航,但我还没有遇到过这种情况。但是,在使用“透明”或“不透明”等 wmode(即不是默认的窗口模式)时,我遇到了不一致的情况。

如果您使用的是 wmode(例如,嵌入 HTML 中的 wmode="transparent"),请尝试禁用它并查看是否会改变行为。

于 2009-12-28T07:31:46.483 回答
1

我也击中了这个——因为滚轮鼠标用 3-5 段控制滑块的位置,所以这是一个明显的故障。

我最终创建了一个计时器并确保在允许新的车轮事件之前经过 10 毫秒。不是一个完美的解决方案,但 10 毫秒感觉合理。

wheel_mouse_lock_time:Number = new Date().getTime();
...

public function image_wheel_zoom(e:MouseEvent):void {
  var current_time:Number = new Date().getTime();

  if (current_time - wheel_mouse_lock_time < 10){
    return; 
  }

  wheel_mouse_lock_time = ctime;

  //handle event
} 
于 2010-03-09T17:15:02.567 回答