其實,開始用as3的時候,event.target 和 event.currentTarget 用的最多了。有的時候,感覺喜歡用哪個就用那個。沒去總結。今天特意查了下別人的博客看了下,也測試了下。這里記錄下來。
event.target、event.currentTarget,他們兩個有什么區別呢?
簡單說,target是事件的調用對象(event dispatcher),currentTarget是事件的處理對象(event processor)。
下邊這個請記住了:
1.target在事件流的目標階段;currentTarget在事件流的捕獲,目標及冒泡階段。只有當事件流處在目標階段的時候,兩個的指向才是一樣的,而當處於捕獲和冒泡階段的時候,target指向被單擊的對象而currentTarget指向當前事件活動的對象(一般為父級)。
2.currentTarget屬性具備兩條件:注冊偵聽器;正在處理事件。
3.真正的事件dispatch者是event.target,監聽事件(addEventListner)的對象是event.currentTarget 。
下邊,我貼出源碼。
package { import flash.display.Sprite; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFormat; public class Main extends Sprite { public function Main() { addEventListener(Event.ADDED_TO_STAGE,addStageHandler); } private function addStageHandler(e:Event) { removeEventListener(Event.ADDED_TO_STAGE,addStageHandler); stage.scaleMode = StageScaleMode.NO_SCALE; var sp1=new Sprite(); var sp2=new Sprite(); sp1.addChild(sp2); addChild(sp1); sp1.name = "sp1"; sp2.name = "sp2"; drawRect(sp1,"0xff0000",200,0.5); drawRect(sp2,"0x00ff00",100,0.4,250); sp1.mouseEnabled=true; sp1.addEventListener(MouseEvent.CLICK,clickHandlerOne); sp2.addEventListener(MouseEvent.CLICK,clickHandlerTwo); } private function clickHandlerOne(e:MouseEvent) { trace("e.target.name:"+e.target.name); trace("e.currentTarget.name:"+e.currentTarget.name) } private function clickHandlerTwo(e:MouseEvent) { trace("sp2:e.target.name:"+e.target.name); trace("sp2:e.currentTarget.name:"+e.currentTarget.name); } private function drawRect(mc:Sprite,color,_width,_alpha,juli:int=0) { mc.graphics.lineStyle(1,0x3399ff,0.5); mc.graphics.beginFill(color); mc.graphics.drawRect(juli,0,_width,_width); mc.graphics.endFill(); var txt:TextField=new TextField(); var txtFormat:TextFormat=new TextFormat(); txtFormat.size = 15; txt.mouseEnabled=false; txt.text = mc.name; txt.setTextFormat(txtFormat); if(mc.name=="sp1") { txt.x=mc.width-30; txt.y=mc.height/2-5; } else { txt.x=250; txt.y=5; } mc.addChild(txt); } } }