2009-12-27 99 views
1

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

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

更新:我测试了一个旧的powerbook(在合并了pixelbreaker的SWFMacMouseWheel脚本后),发现虽然OS X版本的Firefox正常运行,但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

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

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

+0

很高兴知道,但我没有触及wmode,如果直接打开swf,问题仍然存在。 – 2009-12-29 03:39:29

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 
}