Adobe Flash非公式テクニカルノート Event.stopPropagation()とEvent.stopImmediatePropagation()メソッドの違い
Event.stopPropagation()とEvent.stopImmediatePropagation()メソッドは、ともにイベントの伝播を止めます。けれど、ふたつのメソッドの違いがわかりにくいようです(表001)。 表001■[ヘルプ]のEvent.stopPropagation()とEvent.stopImmediatePropagation()メソッドの説明
01 Event.stopPropagation()とEvent.stopImmediatePropagation()メソッドの説明の違い
たとえば、マウスイベントは、デフォルトでは表示リストの階層における親インスタンスにも伝わります。これは具体的には、表示リストの親にもイベントオブジェクトが送られるということです。このイベントオブジェクトが伝わる流れを「イベントフロー」と呼びます。 現行ノードとは、Event.currentTargetプロパティの参照、つまりEventDispatcher.addEventListener()メソッドでリスナーを登録したインスタンスです。現行ノードのリスナーがマウスイベントを処理し終えると、デフォルトではイベントオブジェクトは親インスタンスに送られます(図001)[*1]。 図001■イベントオブジェクトは現行ノードの処理が済んでからつぎのノードに送られる さて、改めて前掲表002を確かめましょう。Event.stopPropagation()メソッドは、親インスタンスなどのつぎのノードにはイベントオブジェクトを渡しません。けれど、現行ノードのリスナーには、イベントオブジェクトを送ります。それに対して、Event.stopImmediatePropagation()メソッドは、現行ノードにおけるイベントオブジェクトの流れも直ちに断ってしまうのです。
02 Event.stopPropagation()とEvent.stopImmediatePropagation()メソッドの違いを確かめる つぎに、以下のスクリプト001をメインタイムラインのフレームアクションとして書きます。MovieClipインスタンスと親のメインタイムラインおよびStageオブジェクトのInteractiveObject.clickイベント(定数MouseEvent.CLICK)に、それぞれふたつのリスナー関数(onClick0()とonClick1())を登録しています。ふたつのリスナー関数はともにtrace()関数で、関数の識別番号とEvent.currentTargetプロパティの値を[出力]します。 スクリプト001■連結リストのエレメントを生成するクラスElement
先に登録したリスナー関数(onClick0())内に記述したEvent.stopPropagation()とEvent.stopImmediatePropagation()メソッドの呼出しは、まだコメントアウトしてあります(スクリプト001第8〜9行目)。したがって、[ムービープレビュー]してMovieClipインスタンスをクリックすると、MovieClipインスタンス、メインタイムライン、Stageオブジェクトの階層順に、ふたつのイベントリスナーが交互に処理されます。[出力]結果はつぎのとおりです。
では、先に登録したリスナー関数(onClick0())内から呼出すEvent.stopPropagation()メソッド(スクリプト001第8行目[1])の行コメント区切り記号を外して有効にします。
Event.stopPropagation()メソッドの呼出しにより、親インスタンスにイベントが渡らなくなります。けれど、現行ノードのつぎのリスナー関数にはイベントオブジェクトが送られます。したがって、MovieClipインスタンスをクリックしたときの[出力]はつぎのように変わります。
先に登録したリスナー関数(onClick0())内のEvent.stopPropagation()メソッドの呼出しはコメントアウトに戻します(スクリプト001第8行目[1])。替わりに、Event.stopImmediatePropagation()メソッドの呼出しを有効にしましょう(第9行目[2])。
Event.stopImmediatePropagation()メソッドは、親インスタンスだけでなく、現行ノードのつぎのリスナーにもイベントオブジェクトを渡しません。つまり、MovieClipインスタンスをクリックしたとき呼出されるのは、インスタンスのマウスイベントに登録した初めのリスナー関数だけになります。
作成者: 野中文雄 Copyright © 2001-2011 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||||||||||