AS3.0 target和currentTarget屬性的區別


       其實,開始用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);
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM