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方形

  说明父级和子级都添加侦听的情况下,点击子级,不仅它本身能侦听到,它的父级也可以侦听到。

由上面可以得出..当使用事件的时候,只需注意addEventListener者 和 使用currentTarget.就不会出现错误...

原文地址:https://www.cnblogs.com/zhepama/p/3348924.html