| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
イベントターゲットは、Flash® Player および Adobe AIR イベントモデルの重要な部分です。 イベントターゲットは、イベントが表示リスト階層をどのように流れるかに関して中心的な役割を果たします。マウスのクリックやキー押下などのイベントが発生すると、イベントオブジェクトが表示リストのルートからイベントフローに送出されます。 イベントオブジェクトはイベントターゲットとの間を往復します。これは、概念として次の 3 つの段階に分けられます。キャプチャ段階は、ルートからイベントターゲットのノードの直前のノードまでが対象となります。ターゲット段階は、イベントのターゲットノードのみが対象となります。バブリング段階は、表示リストのルートまでの戻りにあるすべての後続ノードが対象となります。
一般に、ユーザー定義クラスがイベント送出機能を得る最も簡単な方法は、EventDispatcher を拡張することです。クラスが既に別のクラスを拡張していて拡張が不可能な場合、代わりに IEventDispatcher インターフェイスを実装し、EventDispatcher メンバーを作成して、集約された EventDispatcher に呼び出しをルーティングする単純なフックを記述できます。
| メソッド | 定義元 | ||
|---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | IEventDispatcher | ||
イベントをイベントフローに送出します。 | IEventDispatcher | ||
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | IEventDispatcher | ||
EventDispatcher オブジェクトからリスナーを削除します。 | IEventDispatcher | ||
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | IEventDispatcher | ||
addEventListener | () | メソッド |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。イベントリスナーは、特定のタイプのイベント、段階、および優先度に関する表示リスト内のすべてのノードに登録できます。
イベントリスナーが正常に登録された後に、addEventListener() をさらに呼び出して優先度を変更することはできません。リスナーの優先度を変更するには、最初に removeEventListener() を呼び出す必要があります。その後、同じリスナーを新しい優先度レベルで再度登録できます。
リスナーが登録された後に、addEventListener()(type または useCapture に別の値を設定)を再度呼び出すと、別のリスナー登録が作成されることに注意してください。例えば、最初にリスナーを登録するときに useCapture を true に設定すると、そのリスナーはキャプチャ段階のみでリスニングします。同じリスナーオブジェクトを使用して再度 addEventListener() を呼び出すと(このとき、useCapture に false を設定)、異なる 2 つのリスナーが登録されます。1 つはキャプチャ段階でリスニングするリスナーで、もう 1 つはターゲット段階とバブリング段階でリスニングするリスナーです。
ターゲット段階またはバブリング段階のみを対象とするイベントリスナーを登録することはできません。登録時にこれらの段階が組み合わされるのは、バブリングはターゲットノードの祖先にしか適用されないためです。
イベントリスナーが不要になった場合は、EventDispatcher.removeEventListener() を呼び出して、イベントリスナーを削除します。削除しない場合、メモリの問題が発生する可能性があります。ガベージコレクターは参照を有するオブジェクトを削除しないため、登録されているイベントリスナーに関係したオブジェクトはメモリから自動的に除去されません。
EventDispatcher インスタンスをコピーしても、それに関連付けられているイベントリスナーはコピーされません。新しく作成したノードにイベントリスナーが必要な場合は、ノードを作成した後に、リスナーを関連付ける必要があります。ただし、EventDispatcher インスタンスを移動した場合は、関連付けられているイベントリスナーも一緒に移動されます。
イベントがノードで処理されるときに、イベントリスナーがそのノードに登録中であれば、イベントリスナーは現在の段階ではトリガーされません。ただし、バブリング段階など、イベントフローの後の段階でトリガーすることができます。
イベントがノードで処理されているときにイベントリスナーがノードから削除された場合でも、イベントは現在のアクションによってトリガーされます。削除された後は、その後の処理で再び登録されない限り、イベントリスナーは二度と呼び出されません。
パラメーター
type:String — イベントのタイプです。
| |
listener:Function — イベントを処理するリスナー関数です。次の例のように、この関数は、Event オブジェクトを唯一のパラメーターとして受け取り、何も返さないようにします。
| |
useCapture:Boolean (default = false) — リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。useCapture を true に設定すると、リスナーはキャプチャ段階のみでイベントを処理し、ターゲット段階またはバブリング段階では処理しません。useCapture を false に設定すると、リスナーはターゲット段階またはバブリング段階のみでイベントを処理します。3 つの段階すべてでイベントを受け取るには、addEventListener() を 2 回呼び出します。useCapture を true に設定して 1 度呼び出し、useCapture を false に設定してもう一度呼び出します。
| |
priority:int (default = 0) — イベントリスナーの優先度レベルです。優先度は、32 ビット整数で指定します。数値が大きくなるほど優先度が高くなります。優先度が n のすべてのリスナーは、優先度が n-1 のリスナーよりも前に処理されます。 複数のリスナーに対して同じ優先度が設定されている場合、それらは追加された順番に処理されます。 デフォルトの優先度は 0 です。
| |
useWeakReference:Boolean (default = false) — リスナーへの参照が強参照と弱参照のいずれであるかを判断します。デフォルトである強参照の場合は、リスナーのガベージコレクションが回避されます。弱参照では回避されません。 クラスレベルメンバー関数はガベージコレクションの対象外であるため、クラスレベルメンバー関数の |
dispatchEvent | () | メソッド |
public function dispatchEvent(event:Event):Boolean| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
イベントをイベントフローに送出します。イベントターゲットは EventDispatcher オブジェクトです。これに対して dispatchEvent() が呼び出されます。
パラメーター
event:Event — イベントフローに送出されるイベントオブジェクトです。
|
Boolean — true を返します(イベントで preventDefault() が呼び出されない限り)。呼び出された場合は false を返します。
|
hasEventListener | () | メソッド |
public function hasEventListener(type:String):Boolean| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。これにより、EventDispatcher オブジェクトがイベントタイプの処理をイベントフロー階層のどこで変更したかを判断できます。特定のイベントタイプが実際にイベントリスナーをトリガーするかどうかを判別するには、IEventDispatcher.willTrigger() を使用します。
hasEventListener() と willTrigger() の違いは、hasEventListener() では自身が属するオブジェクトのみ検証され、willTrigger() では type パラメーターで指定されたイベントのイベントフロー全体が検証されることです。
パラメーター
type:String — イベントのタイプです。
|
Boolean — 指定したタイプのリスナーが登録されている場合は true、それ以外の場合は false です。
|
関連する API エレメント
removeEventListener | () | メソッド |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
EventDispatcher オブジェクトからリスナーを削除します。対応するリスナーが EventDispatcher オブジェクトに登録されていない場合は、このメソッドを呼び出しても効果はありません。
パラメーター
type:String — イベントのタイプです。
| |
listener:Function — 削除するリスナーオブジェクトです。
| |
useCapture:Boolean (default = false) — リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階に対して登録されたかどうかを示します。リスナーがキャプチャ段階だけでなくターゲット段階とバブリング段階にも登録されている場合は、removeEventListener() を 2 回呼び出して両方のリスナーを削除する必要があります。1 回は useCapture を true に設定し、もう 1 回は useCapture を false に設定する必要があります。
|
willTrigger | () | メソッド |
public function willTrigger(type:String):Boolean| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。指定されたタイプのイベントがこの EventDispatcher オブジェクトまたはその子孫に送出されたときに、イベントリスナーがイベントフローの任意の段階でトリガーされる場合、このメソッドは true を返します。
hasEventListener() と willTrigger() の違いは、hasEventListener() では自身が属するオブジェクトのみ検証され、willTrigger() では type パラメーターで指定されたイベントのイベントフロー全体が検証されることです。
パラメーター
type:String — イベントのタイプです。
|
Boolean — 指定したタイプのリスナーがトリガーされた場合は true、それ以外の場合は false です。
|
decorDispatcher という名前で作成します。また、この decorDispatcher 変数を使用して、addEventListener() をカスタムイベント doSomething で呼び出します。このカスタムイベントは didSomething() で処理され、trace() を使用してテキストの 1 行を印刷します。
package {
import flash.events.Event;
import flash.display.Sprite;
public class IEventDispatcherExample extends Sprite {
public function IEventDispatcherExample() {
var decorDispatcher:DecoratedDispatcher = new DecoratedDispatcher();
decorDispatcher.addEventListener("doSomething", didSomething);
decorDispatcher.dispatchEvent(new Event("doSomething"));
}
public function didSomething(evt:Event):void {
trace(">> didSomething");
}
}
}
import flash.events.IEventDispatcher;
import flash.events.EventDispatcher;
import flash.events.Event;
class DecoratedDispatcher implements IEventDispatcher {
private var dispatcher:EventDispatcher;
public function DecoratedDispatcher() {
dispatcher = new EventDispatcher(this);
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
dispatcher.addEventListener(type, listener, useCapture, priority);
}
public function dispatchEvent(evt:Event):Boolean{
return dispatcher.dispatchEvent(evt);
}
public function hasEventListener(type:String):Boolean{
return dispatcher.hasEventListener(type);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
dispatcher.removeEventListener(type, listener, useCapture);
}
public function willTrigger(type:String):Boolean {
return dispatcher.willTrigger(type);
}
}
Tue Jun 12 2018, 10:34 AM Z