对以前给团队新成员做的培训的知识点,做下总结,说是培训的知识点,其实也是参考了网络上的资源,分享之。
在事件处理过程中,会自动生成事件类的实例,并传给侦听器函数。
通过这个参数就可以使用事件类的属性和方法。其中target与currentTarget属性是两个很相似的属性。对于简单的事件处理过程,分清target与currentTarget并没有必要。因为它们一般指向同一个对象。
例如,舞台中有一个实例名为mc的影片剪辑实例,通过下面的代码为这个实例注册单击事件。
view source
print?
1 mc.addEventListener(MouseEvent.CLICK,this.test);
2
3 function test(e:MouseEvent)
4 {
5 trace(e.target.name,e.currentTarget.name);
6 }
输出结果是一样的,target与currentTarget属性都是引用舞台中的影片剪辑实例。
但在一个相对复杂的显示列表中,这两个属性是不相同的。 下面通过例子来了解target与currentTarget属性的异同:
1、新建Flash文档
2、改图层1名为as,单击图层的第1帧,打开动作面板,输入代码:
view source
print?
01 var sp1:Sprite=new Sprite() ;
02 var sp2:Sprite=new Sprite() ;
03
04 this.addChild(sp1) ;
05 sp1.addChild(sp2) ;
06
07 drawRect(sp1,0xff0000,200) ;
08 drawRect(sp2,0x0000FF,100);
09
10 //绘制矩形
11 function drawRect(obj:DisplayObject,c:uint,l:int):void;
12 {
13 obj.graphics.beginFill(c) ;
14 obj.graphics.drawRect(0,0,l,l) ;
15 }
上面的代码在主时间轴中创建了Sprite类的实例sp1,在sp1实例内又创建了Sprite类的实例sp2。
如果为父级sp1注册一个单击事件侦听器,当单击sp1时,target与currentTarget都指向sp1,当单击sp2时,target指向sp2,而currentTarget指向sp1。
因此在很多应用中,一般认为currentTarget指向父级。代码如下:
view source
print?
01 sp1.name="sp1";
02 sp2.name="sp2";
03
04 sp1.addEventListener(MouseEvent.CLICK,clickFunc);
05
06 function clickFunc(e:MouseEvent):void
07 {
08 trace(e.target.name,e.currentTarget.name);
09
10 }
3、测试影片,分别单击大小矩形,查看信息
如果为子级和父级都注册一个侦听器,那target属性是指单击的目标,而currentTarget属性是指在处理的事件即活动目标,因为3.0的事件处理有捕获、目标、冒泡3个阶段,并且默认时采用冒泡机制,当单击子级时,currentTarget属性应先指向目标,并向上冒泡,就是先指向sp2,再指向sp1。
为程序增加sp2注册事件侦听器:
view source
print?
1 sp1.addEventListener(MouseEvent.CLICK,clickFunc);
2 sp2.addEventListener(MouseEvent.CLICK,clickFunc);
3
4 function clickFunc(e:MouseEvent):void
5 {
6 trace(e.target.name,e.currentTarget.name);
7 }
因此,currentTarget属性应具备两个条件,一是它注册了侦听器,二是正在处理事件,而target属性就指事件流中的目标,例如,单击了sp2,不管事件如何冒泡或说不管currentTarget指向谁,target都指向sp2。
target属性在事件流的目标阶段,而currentTarget属性在事件流的冒泡阶段、目标阶段和捕获阶段。
以单击事件为例,只有事件流处于目标阶段时,currentTarget属性与target属性的指向才相同,当事件流处于冒泡阶段和捕获阶段时,target属性总是指向被单击的对象,而currentTarget属性指向当前事件活动的对象。
即使在没有发生事件流的处理时,有时也需区别target和currentTarget属性,比如在舞台中创建mc1,在mc1中又创建mc2,且mc2位于mc1的上面。
当对父级对象即mc1处理事件时,使用下面的代码1:
view source
print?
1 mc1.addEventListener(MouseEvent.CLICK,fun)
2
3 function fun(e:MouseEvent)
4 {
5 trace(e.target.name)
6 }
测试影片时,单击mc1,输出mc1,单击mc2,则输出mc2。如果要使用e.target属性始终指向mc1,可以使用容器对象的mouseChildren属性:
view source
print?
1 mc1.mouseChildren = false;
当mc1的mouseChildren属性被设置成 false后,mc1的子级对象将不能处理鼠标事件,此时不管单击mc1还是mc2输出的都是mc1。
代码2:
view source
print?
1 mc1.mouseChildren=false ;
2 mc1.addEventListener(MouseEvent.CLICK,fun);
3
4 function fun(e:MouseEvent)
5 {
6 trace(e.target.name)
7 }
由于currentTarget属性指向当前事件活动的对象,而mc1注册了单击事件,mc2没有注册单击事件,即mc1的事件是活动的。因此不管单击mc1还是mc2,currentTarget属性肯定指向mc1。
代码3;
view source
print?
1 mc1.addEventListener(MouseEvent.CLICK,fun) ;
2
3 function fun(e:MouseEvent)
4 {
5 trace(e.currentTarget.name)
6 }
详细解决方案
AS3中Event 种的target和currentTarget属性
热度:196 发布时间:2012-11-05 09:35:11.0
相关解决方案
- struts2 对象属性流入不进去, 报错:target is null for setProperty(null, "x" [Ljava.lang.Stri
- GWT 报错,能的请进: com.google.gwt.event.shared.UmbrellaException: Exception caught: Se
- request.getParameter("target");是什么意思,该如何解决
- Android运行宝Automatic Target Mode: Preferred AVD 'myavd' is not available解决办法
- websphere5.12 Error 503: Failed to load target servlet [action],该如何处理
- import java.awt.event;编译没法通过
- 怎么自动执行<a href="document.html" target="parent">my document</a> 呢
- c#怎么在后台写类似前台<a href target>
- 【HTML基础提问】a 标签的 target="blank" 为何在手机浏览器里不能打开新的页面解决方法
- 代码 <a href="uppic/<%=nfn %>" target=“_blank”>下载</a> 可以实现下载,该怎么解决
- 请问Ajax高手:Event.observe的用处
- public event EventHandler Click,该如何解决
- 上传文件过大出现次异常,"Event message: Post 大小超出允许的限制。" ,怎么解决
- <base target="self"> 无效解决方法
- <input type="text" ID="abc" OnKeyPress="return event.keyCode>=48&&event.keyCode<=57"/>解决方案
- 如何用<a href="/tzsb/about.htm" target="blank">这种方式来指定弹出新窗口的大小
- 在构架文件中用 window.open 打开一个 pop.aspx 文件,想让里面的超链接的 target 为某一框架
- treeview 中 url页面弹出新的页面而没有在框架中显示?target='框架的ID'解决方法
- Windows7系统中启动Windows Event Log服务提示拒绝访问,异常5的解决办法
- brew,AXD 测试,waring 00201: cannot open target the target is not responding.解决方案
- mtk第一次调用模拟器有关问题出现NO rule to make target 'seccond'.stop
- Tornado远程调试的有关问题:Target Server will exit
- Wrong arguments. new for target java.lang.reflect.Constructor expected=[java.net,该怎么处理
- 一个关于dblclick event 的代码,该怎么解决
- 解决Symbolic link not allowed or link target not accessible有关问题一例
- target,currentTarget,originalTarget,explicitOriginalTarget差异
- 跟小弟我学aspectj之十一 - target() this() within()的区别
- 为啥用了<meta http-equiv="Windows-Target" content="top"网页还是能在分帧中显示,恳求个大神帮忙解决
- 问个题,target='_black'能否指定打开页面的大小
- css3 :target 跟onclick 的区别