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 が機能しません。なんで?

4

2 に答える 2

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 メソッドでリスナーをアタッチしてみてください。

于 2012-06-19T07:45:19.387 に答える
1

画面にコンテンツが表示されている場合、問題はおそらくクリックイベントの処理にあります。

クリックイベントは、ローダーよりも表示リストの下位にあるものをターゲットにしている可能性があります(ローダーのコンテンツやその中の子など、ローダーをクリックせず、ローダー内のMovieClipをクリックしました)。要件に応じて、いくつかの異なることを試すことができます。

  1. useCapture = trueでリッスンします(これにより、ロードされたムービー内のコンテンツをクリックすると登録されます):

    loader.addEventListener(MouseEvent.CLICK, onClick, true);
    
  2. ローダーでmouseChildrenを無効にします。これは、クリックイベントがローダーで停止し、ローダーの子に登録されないことを意味します。

    loader.mouseChildren = false;
    loader.addEventListener(MouseEvent.CLICK, onClick);
    
    • これにより、ロードされたswfのクリックイベント(ボタンなど)を必要とするコンテンツが機能しなくなる可能性があることに注意してください。ただし、ローダーのコンテンツがインタラクティブであることを意図していない場合は、これで問題ありません。
于 2012-06-19T14:20:03.750 に答える