在事件处理过程中,会自动生成事件类的实例,并传给侦听器函数。通过这个参数就可以使用事件类的属性和方法。其中target与currentTarget属性是两个很相似的属性。
 对于简单的事件处理过程,分清target与currentTarget并没有必要。因为它们一般指向同一个对象。例如,舞台中有一个实例名为mc的影片剪辑实例,通过下面的代码为这个实例注册单击事件。 mc.addEventListener(MouseEvent.CLICK,this.test);
function test(e:MouseEvent)
{
trace(e.target.name,e.currentTarget.name);
}
 输出结果是一样的,target与currentTarget属性都是引用舞台中的影片剪辑实例。但在一个相对复杂的显示列表中,这两个属性是不相同的。
 下面通过例子来了解target与currentTarget属性的异同
1、新建Flash文档
2、改图层1名为as,单击图层的第1帧,打开动作面板,输入代码:
var sp1:Sprite=new Sprite() ;
var sp2:Sprite=new Sprite() ; this.addChild(sp1) ;
sp1.addChild(sp2) ; drawRect(sp1,0xff0000,200) ;
drawRect(sp2,0x0000FF,100); //绘制矩形
function drawRect(obj:DisplayObject,c:uint,l:int):void;
{
obj.graphics.beginFill(c) ;
obj.graphics.drawRect(0,0,l,l) ;
}
上面的代码在主时间轴中创建了Sprite类的实例sp1,在sp1实例内又创建了Sprite类的实例sp2。如果为父级sp1注册一个单击事件侦听器,当单击sp1时,target与currentTarget都指向sp1,当单击sp2时,target指向sp2,而currentTarget指向sp1。因此在很多应用中,一般认为currentTarget指向父级。代码如下:
sp1.name="sp1";
sp2.name="sp2";
sp1.addEventListener(MouseEvent.CLICK,clickFunc); function clickFunc(e:MouseEvent):void
{
trace(e.target.name,e.currentTarget.name); }
3、测试影片,分别单击大小矩形,查看信息
 如果为子级和父级都注册一个侦听器,那target属性是指单击的目标,而currentTarget属性是指在处理的事件即活动目标,因为3.0的事件处理有捕获、目标、冒泡3个阶段,并且默认时采用冒泡机制,当单击子级时,currentTarget属性应先指向目标,并向上冒泡,就是先指向sp2,再指向sp1。
 为程序增加sp2注册事件侦听器:
sp1.addEventListener(MouseEvent.CLICK,clickFunc);
sp2.addEventListener(MouseEvent.CLICK,clickFunc);
function clickFunc(e:MouseEvent):void
{
trace(e.target.name,e.currentTarget.name);
}
因此,currentTarget属性应具备两个条件,一是它注册了侦听器,二是正在处理事件,而target属性就指事件流中的目标,例如,单击了sp2,不管事件如何冒泡或说不管currentTarget指向谁,target都指向sp2。
 target属性在事件流的目标阶段,而currentTarget属性在事件流的冒泡阶段、目标阶段和捕获阶段。以单击事件为例,只有事件流处于目标阶段时,currentTarget属性与target属性的指向才相同,当事件流处于冒泡阶段和捕获阶段时,target属性总是指向被单击的对象,而cu rrentTarget属性指向当前事件活动的对象。
 即使在没有发生事件流的处理时,有时也需区别target和currentTarget属性,比如在舞台中创建mc1,在mc1中又创建mc2,且mc2位于mc1的上面。
 当对父级对象即mc1处理事件时,使用下面的代码1:
mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.target.name)
}
测试影片时,单击mc1,输出mc1,单击mc2,则输出mc2。如果要使用e.target属性始终指向mc1,可以使用容器对象的mouseChildren属性: mc1.mouseChildren = false;  当mc1的mouseChildren属性被设置成 false后,mc1的子级对象将不能处理鼠标事件,此时不管单击mc1还是mc2输出的都是mc1。代码2:
mc1.mouseChildren=false
mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.target.name)
}
由于currentTarget属性指向当前事件活动的对象,而mc1注册了单击事件,mc2没有注册单击事件,即mc1的事件是活动的。因此不管单击mc1还是mc2,currentTarget属性肯定指向mc1。
代码3;
mc1.addEventListener(MouseEvent.CLICK,fun)
function fun(e:MouseEvent)
{
trace(e.currentTarget.name)
}

  

AS3中 Event 类的target和currentTarget属性的更多相关文章

  1. 小程序开发 event对象中 target和currentTarget 属性的区别。

    首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素 p包含在div内 在outer上点击时,target跟currentTarget ...

  2. flex中Event类的使用

    当您创建自己的自定义 Event 类时,必须覆盖继承的 Event.clone() 方法,以复制自定义类的属性.如果您未设置在事件子类中添加的所有属性,则当侦听器处理重新分派的事件时,这些属性将不会有 ...

  3. event对象中 target和currentTarget 属性的区别。

    首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素

  4. JavaScript事件属性event.target和currentTarget 属性的区别。

    event.target 获取的是触发事件的标签元素 event.currentTarget 获取到的是发起事件的标签元素 一.事件属性:event.target target事件委托的定义:本来该自 ...

  5. DOM中Event 对象如何使用

    DOM中Event 对象如何使用 一.总结 一句话总结: 1.将event作为参数传递进来,然后就可以调用event对象的各种属性和方法了. <body onmousedown="wh ...

  6. 微信小程序的target和currentTarget的区别

    https://www.jb51.net/article/160886.htm 在小程序的事件回调触发时,会接收一个事件对象,事件对象的参数中包含一个target和currentTarget属性,接下 ...

  7. JavaScript中创建类,赋值给ajax中的data参数

    缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...

  8. 3.UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  9. GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系

    统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...

随机推荐

  1. Java关键字

    Java关键字简介 类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 exte ...

  2. lua中的中文乱码

    最近在用lua, 发现一个有点意思的槽点啊-____-! 那就是lua貌似会使用系统所用的字符集. 具体点说, 就是在windows上, 它会使用cp936来表示代码中的中文. 来个例子: print ...

  3. GO语言练习:反射

    列举几个反射的例子:1)简单类型反射,2)复杂类型反射,3)对反射回来的数据的可修改属性 1.简单类型反射 1.1)代码 package main import ( "fmt" & ...

  4. 【转】最近公共祖先(LCA)

    基本概念 LCA:树上的最近公共祖先,对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.v的祖先且x的深度尽可能大. RMQ:区间最小值查询问题.对于长度为n的 ...

  5. Unity3d使用UGUI实现长按功能

    UGUI的Button组件只有OnClick事件的监听,要实现长按功能,要监听按下事件和抬起事件,所以要使用到EventTrigger组件中的OnPointerDown和OnPointerUp来监听. ...

  6. jQuery实现的简单小功能(实用)

    1.返回顶部使用JQuery的animate和scrollTop方法可以创建简单地返回顶部的动画: // Back to top $('#top').click(function (e) { e.pr ...

  7. 使用非Web方式从CA申请证书

    背景介绍:关于从CA申请证书这点事,网上的那些教程基本都是让我们通过访问https://server/certsrv这样的网页来操作的,我一直希望不依赖IIS就把这事干了,于是就有了下面的文章. 1. ...

  8. php如何查看变量是真实被引用

    $var1 = 'Hello World'; $var2 = ''; $var2 =&$var1; debug_zval_dump(&$var1); $a = "aaa&qu ...

  9. Git系列教程三 配置与基本命令

    一.安装Git 网上有很多安装教程,可以参考.这里使用的是Windows版本的Git,点击这里下载. 二.基本设置 安装完成后,通过点击鼠标右键就可以看到新添加了俩个Git命令:Git GUI Her ...

  10. Maven 集成Tomcat插件

    转自:https://my.oschina.net/lilw/blog/168667 Maven Tomcat 插件现在主要有两个版本,tomcat-maven-plugin和tomcat7-mave ...