2015-07-09 88 views
1

我有一個使用Loader對象加載子SWF的Flash瀏覽器應用程序。Flash/AS3 - 如何在不禁用鼠標懸停事件的情況下禁用子SWF鼠標點擊

孩子swf有一個mouseclick監聽器,它調用nativateToUrl並打開一個新的網頁。它還包含鼠標懸停事件,使swf中的內容四處移動。

這個加載的應用程序就像是一個兒童swf的容器,當點擊它時應該打開一個不同的網頁。所以基本上我想壓制孩子swf mouseEvent,並聽聽鼠標點擊容器swf,打開新的URL。

我聽說過其他人將隱形精靈放在原始內容上,這樣子swf實際上並不會捕捉到鼠標點擊事件。但是,這不適用於我的情況,因爲它不會獲得鼠標懸停事件。我想讓mousehover事件通過,並讓子swf中的事物移動,但也抑制了click事件。

所以,對於所有的閃光燈主謀在那裏......這是可能的嗎?我該怎麼做?

:)謝謝。

回答

1

如果要抑制到達加載的SWF都MouseEvent.CLICK事件,您可以執行以下操作:

讓我們假設你有以下設置:

var loader:Loader = new Loader(); 
loader.load(new URLRequest("child.swf")); 
addChild(loader); 

你能做什麼,就是聽對在裝載機click事件捕獲階段:

loader.addEventListener(MouseEvent.CLICK, handler, true);//the third parameter (true) tells flash to listen on the capture phase of an event's lifecycle 

然後從該單擊處理程序,取消事件,因此不會傳播到TH Ë加載的SWF:

function handler(e:Event):void { 
    e.stopImmediatePropagation(); 
} 

如果你不明白事件的階段,從Adobe這個圖可以幫助:

enter image description here

Source

順便說一句,如果你想爲了從SWF中壓制所有的鼠標東西,一個更好的方法(而不是添加一個不可見的精靈)就是這樣做的:

loader.mouseChildren = false; 
+0

太棒了!感謝蝙蝠俠! – Robuttst

+0

沒問題!這是一個很好的問題。如果您認爲這樣可以正確回答您的問題,請接受答案(投票按鈕下方的灰色複選標記)。 – BadFeelingAboutThis

+0

更新 - 對不起蝙蝠俠,這是行不通的。鼠標事件永遠不會被解僱。它似乎在IDE Flash播放器中工作,但不在瀏覽器中工作...:/ – Robuttst