2012-06-19 156 views
0
var url:String; 
var link:String; 
var w:Number; 
var h:Number; 

url = loaderInfo.parameters.swfurl; 
link = loaderInfo.parameters.link; 

var request:URLRequest = new URLRequest(url); 
var loader:Loader = new Loader(); 

loader.load(request); 
addChild(loader); 


loader.addEventListener(MouseEvent.CLICK, onClick); 

function onClick(e:MouseEvent){ 
     trace('clicked'); 
} 

此腳本向我顯示外部swf文件。但MouseEvent.CLICK不起作用。爲什麼?爲什麼CLICK事件不起作用?

+0

check loaderInfo.parameters.swfurl featch right url鏈接。因爲當我運行你的代碼給本地SWF文件的工作。 –

回答

2

什麼是您正在加載作爲外部資源。如果它是SWF,那麼那裏有什麼東西。另外,我會建議在swf加載後附加監聽器。即在Event.COMPLETE處理程序中。這是從文檔代碼:

package { 
import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.*; 
import flash.net.URLRequest; 

public class LoaderExample extends Sprite { 
    private var url:String = "Image.gif"; 

    public function LoaderExample() { 
     var loader:Loader = new Loader(); 
     configureListeners(loader.contentLoaderInfo); 
     loader.addEventListener(MouseEvent.CLICK, clickHandler); 

     var request:URLRequest = new URLRequest(url); 
     loader.load(request); 

     addChild(loader); 
    } 

    private function configureListeners(dispatcher:IEventDispatcher):void { 
     dispatcher.addEventListener(Event.COMPLETE, completeHandler); 
     dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); 
     dispatcher.addEventListener(Event.INIT, initHandler); 
     dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
     dispatcher.addEventListener(Event.OPEN, openHandler); 
     dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
     dispatcher.addEventListener(Event.UNLOAD, unLoadHandler); 
    } 

    private function completeHandler(event:Event):void { 
     trace("completeHandler: " + event); 
    } 

    private function httpStatusHandler(event:HTTPStatusEvent):void { 
     trace("httpStatusHandler: " + event); 
    } 

    private function initHandler(event:Event):void { 
     trace("initHandler: " + event); 
    } 

    private function ioErrorHandler(event:IOErrorEvent):void { 
     trace("ioErrorHandler: " + event); 
    } 

    private function openHandler(event:Event):void { 
     trace("openHandler: " + event); 
    } 

    private function progressHandler(event:ProgressEvent):void { 
     trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); 
    } 

    private function unLoadHandler(event:Event):void { 
     trace("unLoadHandler: " + event); 
    } 

    private function clickHandler(event:MouseEvent):void { 
     trace("clickHandler: " + event); 
     var loader:Loader = Loader(event.target); 
     loader.unload(); 
    } 
} 

}

所以嘗試將聽者completeHandler方法。

1

如果您看到的內容在屏幕上,那麼問題可能出在點擊事件處理:

click事件很可能是針對一些在顯示列表低於裝載機(如裝載機內容或其中的兒童 - 也就是說,你沒有點擊加載器,你點擊了其中的MovieClip)。你可以嘗試一些不同的東西根據您的要求:

  1. 將useCapture聽=真(這會爲加載的影片中的任何內容的任何點擊註冊):

    loader.addEventListener(MouseEvent.CLICK, onClick, true); 
    
  2. 禁用mouseChildren在裝載機上。這將意味着單擊事件將停止在加載,而不是在裝載機的孩子註冊了下來:

    loader.mouseChildren = false; 
    loader.addEventListener(MouseEvent.CLICK, onClick); 
    
    • 注意,這可能會導致要單擊事件中加載的SWF文件(如按鈕)到不行內容。但是如果加載程序的內容不是互動的,這應該沒問題。
相關問題