AS3 に関する多くの記事を読み、実際に実際のプロジェクトを完了したにもかかわらず、単純なイベント処理タスクに戸惑うことがよくあります。
現在の Flex プロジェクトでは、ユーザーはカスタム BorderContainer ベースのクラスのインスタンスを作成し、それらを選択して移動またはサイズ変更できます。現在選択されているインスタンスを選択解除するために、背景の BorderContainer (またはステージ) で発生するマウス クリックを検出するイベント リスナーを追加したいと考えています。
誰かがこれを達成するための手順を概説できますか? 考えられることはすべて試しました (有効化/無効化useCapture
、event.target と event.currentTarget の比較、eventPhase のテスト)。
私のプロジェクトは複雑すぎて投稿できませんが、以下の単純なテスト ケースを使用すると、次のような出力が得られますが、まったく意味がありません。結果は同じです。
私の質問: 特定のオブジェクトでのみ発生するマウス イベントを検出するにはどうすればよいですか?
カスタム BorderContainer のインスタンスをクリックします。
----------stage click 1
stage is TARGET 1
----------stage click 1
stage is TARGET 1
-----------background click 1
background is currentTarget 1
-----------background click 3
background is currentTarget 3
----------stage click 3
stage is TARGET 3
----------stage click 3
stage is TARGET 3
background
直接クリックする:
----------stage click 1
stage is TARGET 1
----------stage click 1
stage is TARGET 1
-----------background click 1
background is currentTarget 1
-----------background click 3
background is currentTarget 3
----------stage click 3
stage is TARGET 3
----------stage click 3
stage is TARGET 3
//----------------------
background.addEventListener(MouseEvent.CLICK, backgroundClick);
background.addEventListener(MouseEvent.CLICK, backgroundClick, true);
stage.addEventListener(MouseEvent.CLICK, stageClick);
stage.addEventListener(MouseEvent.CLICK, stageClick, true);
protected function backgroundClick(event:MouseEvent):void {
trace("-----------background click", event.eventPhase);
if (event.target == background){
trace("background is TARGET",event.eventPhase);
}
if (event.currentTarget == background){
trace("background is currentTarget",event.eventPhase);
}
}
protected function stageClick(event:MouseEvent):void {
trace("----------stage click",event.eventPhase);
if (event.target == stage){
trace("stage is currentTarget",event.eventPhase);
}
if (event.currentTarget == stage){
trace("stage is TARGET",event.eventPhase);
}
}