コンポーネントでのイベントリスナーの使用

コンポーネントを操作する場合、イベントリスナーのシンタックスが少し異なります。コンポーネントは、イベントを生成します。これらのイベントは、リスナーオブジェクトまたはカスタム関数を使用して特別に監視する必要があります。

次の例では、イベントリスナーを使用して、動的にロードされるイメージのダウンロードの進捗状況を監視する方法について説明します。

Loader コンポーネントのイベントを監視するには :

  1. Loader コンポーネントのインスタンスを [コンポーネント] パネルからステージ上にドラッグします。
  2. ローダーを選択し、プロパティインスペクタの [インスタンス名] テキストボックスに「my_ldr」と入力します。
  3. メインタイムラインのフレーム 1 に次のコードを追加します。
    System.security.allowDomain("http://www.helpexamples.com");
    
    var loaderListener:Object = new Object();
    loaderListener.progress = function(evt_obj:Object):Void {
        trace(evt_obj.type); // 進捗状況
        trace("\t" + evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded");
    }
    loaderListener.complete = function(evt_obj:Object):Void {
        trace(evt_obj.type); // 完了
    }
    
    my_ldr.addEventListener("progress", loaderListener);
    my_ldr.addEventListener("complete", loaderListener);
    my_ldr.load("http://www.helpexamples.com/flash/images/image1.jpg");
    

    この ActionScript コードは、progresscomplete という 2 つのイベントを監視する loaderListener という名前のリスナーオブジェクトを定義します。これらの各イベントが送り出されると、これらのコードが実行され、[出力] パネルにデバッグテキストが表示されます (オーサリングツールで SWF ファイルをテストする場合)。

    次に、my_ldr インスタンスに対して 2 つの指定した各イベント (progresscomplete) を監視するように指示し、イベントが送り出されたときに実行するリスナーオブジェクトまたは関数を指定します。最後に、Loader.load() メソッドが呼び出され、イメージのダウンロードの開始をトリガします。

  4. [制御]-[ムービープレビュー] を選択して SWF ファイルをテストします。

    イメージは、ステージ上の Loader インスタンス内にダウンロードされ、[出力] パネルにいくつかのメッセージが表示されます。ダウンロードするイメージのサイズ、およびイメージがユーザーのローカルシステムにキャッシュされたかどうかに応じて、progress イベントは何度も送り出される可能性があります。これに対して、complete イベントは、イメージが完全にダウンロードされた後に 1 回だけ送り出されます。

    コンポーネントおよび dispatch イベントを操作する場合のシンタックスは、前の例のイベントリスナーの場合と少し異なります。特に、addListener() を呼び出す代わりに addEventListener() メソッドを呼び出す必要があります。さらに、イベントリスナーオブジェクトまたは関数に加えて、監視する特定のイベントを指定する必要があります。

リスナーオブジェクトを使う代わりに、コンポーネントでのイベントリスナーの使用で説明されている最初の手順にしたがってカスタム関数を使用できます。前の例のコードは、次のように書き直すことができます。

System.security.allowDomain("http://www.helpexamples.com");

my_ldr.addEventListener("progress", progressListener);
my_ldr.addEventListener("complete", completeListener);
my_ldr.load("http://www.helpexamples.com/flash/images/image1.png");

function progressListener(evt_obj:Object):Void {
    trace(evt_obj.type); // 進捗状況
    trace("\t" + evt_obj.target.bytesLoaded + " of " + evt_obj.target.bytesTotal + " bytes loaded");
}
function completeListener(evt_obj:Object):Void {
    trace(evt_obj.type); // 完了
}

メモ

 

前の例では、常に、Loader.load() メソッドが呼び出される前に常にイベントリスナーが追加されていました。それで、イベントリスナーを指定する前に Loader.load() メソッドを呼び出すと、イベントリスナーが完全に定義される前にロードが完了する可能性があります。これは、コンテンツが表示されても、complete イベントがキャッチされない可能性があることを意味します。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000839.html