2009-12-27 42 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 
} 
相關問題