AS3中 Event 类的target和currentTarget属性
在事件处理过程中,会自动生成事件类的实例,并传给侦听器函数。通过这个参数就可以使用事件类的属性和方法。其中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属性的更多相关文章
- 小程序开发 event对象中 target和currentTarget 属性的区别。
首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素 p包含在div内 在outer上点击时,target跟currentTarget ...
- flex中Event类的使用
当您创建自己的自定义 Event 类时,必须覆盖继承的 Event.clone() 方法,以复制自定义类的属性.如果您未设置在事件子类中添加的所有属性,则当侦听器处理重新分派的事件时,这些属性将不会有 ...
- event对象中 target和currentTarget 属性的区别。
首先本质区别是: event.target返回触发事件的元素 event.currentTarget返回绑定事件的元素
- JavaScript事件属性event.target和currentTarget 属性的区别。
event.target 获取的是触发事件的标签元素 event.currentTarget 获取到的是发起事件的标签元素 一.事件属性:event.target target事件委托的定义:本来该自 ...
- DOM中Event 对象如何使用
DOM中Event 对象如何使用 一.总结 一句话总结: 1.将event作为参数传递进来,然后就可以调用event对象的各种属性和方法了. <body onmousedown="wh ...
- 微信小程序的target和currentTarget的区别
https://www.jb51.net/article/160886.htm 在小程序的事件回调触发时,会接收一个事件对象,事件对象的参数中包含一个target和currentTarget属性,接下 ...
- JavaScript中创建类,赋值给ajax中的data参数
缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...
- 3.UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系
统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...
随机推荐
- ZeroMQ接口函数之 :zmq_null - 无安全和加密
ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_null zmq_null(7) ØMQ Manual - ØMQ/4.1.0 Name zmq_null - 无 ...
- phpcmsv9多表联合查询分页功能实现
phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊.不支持多表查询并分页. 看了一下前台模板层支持get标签,支持多表查询,支持分页.刚好可以把这个功能搬到后台来使用. 我们现在对g ...
- [html] 有利于seo优化的div+css命名规范
搜索引擎优化(seo)对命名规范有很多要求,下面是我收集的一些当下主流的命名(还是比较常用的): CSS样式命名 说明 网页公共命名 #wrapper 页面外围控制整体布局宽度 #container或 ...
- <三>JDBC_面向对象思想的体现
JDBCTools.java import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;i ...
- win10启动无法进入桌面
情况: windows启动显示欢迎界面 无法进入桌面(可以win+E进入资源管理器,可以ctl+alt+delete进入任务管理器) 重启依然无法进入 解决: 重启 按f8 进入安全模式 再次重启OK ...
- Xamarin的不归路-生成安卓错误
编译生成安卓时提示错误 解决方案:删掉此文件夹(C:\Users\***\AppData\Local\Xamarin\)内所以文件夹和文件,再FQ重新编译即可. 2016年9月1日 13:33
- iOS PCH文件
在Xcode6之前,创建一个新的工程,Xcode会再Support Files文件夹下自动创建一个"工程名 - prefix.pch"文件,也是一个头文件,pch文件的内容能被项目 ...
- 谢欣伦 - OpenDev原创教程 - 通信开发库libComm
libComm是一个免费的简单的通信库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 Sample using libComm - v1.1 For WinXP lib ...
- stl循环删除
struct st_data { st_data(int i) : id(i) {} int id; }; 对于STL标准序列容器vector/deque/list(以vector为例) 当我们需清空 ...
- PHP基础知识之数组
数组的定义: array( key => value , ... ) // 键(key)可以是一个整数或字符串,键可以省略,默认从0开始索引 // 值(value)可以是任意类型的值或者简写的方 ...