currentTarget 與 Target 的區別(轉載)

在一般情況下,target與currentTarget指向的是同一個對象。一般情況是指我們只對某一個獨立的mc添加偵聽器。如下:

var mc:Sprite=new Sprite();
addChild(mc);
mc.x=300,mc.y=300;
mc.graphics.beginFill(0×000000);
mc.graphics.drawRoundRect(0,0,50,50,10,10);
mc.name=”圓角矩形mc”;

mc.addEventListener(MouseEvent.CLICK,clickF);
function clickF(e) {
 trace(“target:”+e.target.name);
 trace(“currentTarget:”+e.currentTarget.name);
}

//輸出中可以看出,target與currentTarget均指向”圓角矩形mc”

  特殊情況是指,有兩個容器實例:sp1和sp2,且sp2裝在sp1之中,即sp1.addChild(sp2)。然後分別給sp1和sp2添加偵聽器,此時target與currentTarget的指向是較複雜的。見下面的代碼:

var sp1:Sprite=new Sprite();
addChild(sp1);
sp1.x=100;
sp1.y=50;
sp1.name=”sp1方形”;

var sp2:Sprite=new Sprite();
sp1.addChild(sp2);
sp2.x=100;
sp2.y=50;
sp2.name=”sp2圓形”;

sp1.graphics.beginFill(0xff0000);
sp1.graphics.drawRect(0,0,50,50);

sp2.graphics.beginFill(0×0000ff);
sp2.graphics.drawCircle(0,0,25);

sp1.addEventListener(MouseEvent.CLICK,clickFunc);
//sp2.addEventListener(MouseEvent.CLICK,clickFunc);
function clickFunc(e) {
trace(“target:”+e.target.name);
trace(“currentTarget:”+e.currentTarget.name)
}

  代碼是給父容器添加了偵聽器,這裏又分兩種情況:一、點擊sp1,輸出target與currentTarget均指向sp1;二、點擊sp2,輸出target指向sp2,currentTarget指向sp1(即父容器);

  將sp1.addEventListener(MouseEvent.CLICK,clickFunc);註釋掉,再打開sp2.addEventListener(MouseEvent.CLICK,clickFunc);的註釋,此時也可分兩種情況:一、點擊sp1,結果沒有反應,因爲並未給它添加偵聽器;二、點擊sp2,輸出target與currentTarget均指向sp2(很好理解,也因爲它的父級容器沒有添加偵聽)。

  將以上爲sp1和sp2註冊偵聽器的語句都打開,點擊sp1會怎樣?點擊sp2呢?

  點擊sp1輸出:

target:sp1方形
  currentTarget:sp1方形

  點擊sp2輸出:

target:sp2圓形
  currentTarget:sp2圓形
target:sp2圓形
  currentTarget:sp1方形

  說明父級和子級都添加偵聽的情況下,點擊子級,不僅它本身能偵聽到,它的父級也可以偵聽到。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章