在XP Firefox上的Flash中重复鼠标滚轮事件

时间:2009-12-27 23:39:56

标签: flash actionscript-3 firefox haxe

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

这是一个已知问题,还是我可能做错了什么?是否有一种解决方法不涉及像检查用户代理和忽略其他所有事件一样疯狂的事情?

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

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

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"); });
    }
}
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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
}