您的位置:首页 > 其它

currentTarget 与 Target 的区别(转载)

2011-11-30 10:05 281 查看
在一般情况下,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方形

  说明父级和子级都添加侦听的情况下,点击子级,不仅它本身能侦听到,它的父级也可以侦听到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: