as3的 事件流就三个阶段 捕获 目标 冒泡

上传人:小** 文档编号:89122251 上传时间:2019-05-18 格式:DOC 页数:5 大小:18.50KB
返回 下载 相关 举报
as3的 事件流就三个阶段  捕获   目标  冒泡_第1页
第1页 / 共5页
as3的 事件流就三个阶段  捕获   目标  冒泡_第2页
第2页 / 共5页
as3的 事件流就三个阶段  捕获   目标  冒泡_第3页
第3页 / 共5页
as3的 事件流就三个阶段  捕获   目标  冒泡_第4页
第4页 / 共5页
as3的 事件流就三个阶段  捕获   目标  冒泡_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《as3的 事件流就三个阶段 捕获 目标 冒泡》由会员分享,可在线阅读,更多相关《as3的 事件流就三个阶段 捕获 目标 冒泡(5页珍藏版)》请在金锄头文库上搜索。

1、AS3的事件流就三个阶段捕获目标冒泡原文地址:AS3的事件流就三个阶段,捕获目标冒泡作者:景安数据李怀丽而在鼠标事件中,共有10种鼠标事件,分别如下:点击事件:MouseEvent.CLICK,MouseEvent.DOUBLE_CLICK按键事件:MouseEvent.MOUSE_DOWN,MouseEvent.MOUSE_UP悬停事件:MouseEvent.MOUSE_OVER,MouseEvent.MOUSE_OUT,MouseEvent.ROLL_OVER,MouseEvent.ROLL_OUT移动事件:MouseEvent.MOUSE_MOVE滚轮事件:MouseEvent.MOUS

2、E_WHEEL最令我不解的就是悬停事件:MOUSE_OVER,MOUSE_OUT,ROLL_OVER,ROLL_OUT它们的具体工用是相似的MOUSE_OVER=ROLL_OVERMOUSE_OUT=ROLL_OUT唯一不同的是前者参与事件流的冒泡阶段,而后者则不参加,黑羽书上的例子类似,一个内部有文本框的按钮,MOUSE_OVER,MOUSE_OUT事件中,鼠标移到按钮上,会触发over事件,当鼠标继续移,移到按钮里的文本上时,就会触发文本的MOUSE_OVER事件,同一时间,按钮的MOUSE_OUT事件也会触发而如果使用ROLL_OVER,ROLL_OUT呢,这种情况下,鼠标移入按钮后,只

3、要不移出按钮范围,按钮的OUT事件是不会触发的.(_/括号内的内容为后期补充,实然是最终结果,建议先跳过看后面的,回头再看本段文字此处我掉入了一个误区,不明白为什么移上子mc会触发移出事件,然后又触发移入事件,其实不然,是事件流的原因,因为事件流机制默认是在冒泡阶段侦听的所以整个流程解析就是,1.先是鼠标移入按钮范围,触发按钮mc的MOUSE_OVER事件,向上冒泡,没有其它对象侦听了,2.鼠标继续移,移入内部影片剪辑a的范围时,触发mc的MOUSE_OUT事件,同时又触发a的MOUSE_OVER事件,3.进入子影片剪辑a的冒泡阶段,因为a的父对象mc有侦听MOUSE_OVER事件的,所以会触

4、发mc的移入事件4.鼠标移出a影片剪辑范围(仍未移出mc范围)时,触发a侦听的MOUSE_OUT事件,5.进入子影片剪辑a的冒泡阶段,触发mc的移出事件MOUSE_OUT6.鼠标重新移入到mc影片剪辑的范围,触发mc的MOUSE_OVER事件7.鼠标移出mc范围,触发mc的MOUSE_OUT事件/鼠标移入mc范围,未移入子影片剪辑a范围/外部_移入_当前mc_目标mcmc的MOUSE_OVER生效/鼠标移入子影片剪辑a范围/外部_移出_当前mc_目标mcmc的MOUSE_OUT生效/内部_移入_当前a_目标amc.a的MOUSE_OVER生效/外部_移入_当前mc_目标a冒泡阶段,mc的MOU

5、SE_OVER生效/鼠标移出子影片剪辑a范围/内部_移出_当前a_目标amc.a的MOUSE_OUT生效/外部_移出_当前mc_目标a冒泡阶段,mc的MOUSE_OUT生效/外部_移入_当前mc_目标mcmc的MOUSE_OVER生效/鼠标移出影片剪辑mc范围,回到舞台/外部_移出_当前mc_目标mcmc的MOUE_OUT生效上面是trace出来的结果,下面是源代码,场景中一个大影片剪辑mc,套一个小影片剪辑a复制内容到剪贴板代码:mc.a.addEventListener(MouseEvent.MOUSE_OVER,onFunA)mc.a.addEventListener(MouseEven

6、t.MOUSE_OUT,onFunB)mc.addEventListener(MouseEvent.MOUSE_OVER,onFunC)mc.addEventListener(MouseEvent.MOUSE_OUT,onFunD)functiononFunA(_evt:MouseEvent)trace(内部_移入_当前,_evt.currentTarget.name,_目标,_evt.target.name)functiononFunB(_evt:MouseEvent)trace(内部_移出_当前,_evt.currentTarget.name,_目标,_evt.target.name)fu

7、nctiononFunC(_evt:MouseEvent)trace(外部_移入_当前,_evt.currentTarget.name,_目标,_evt.target.name)functiononFunD(_evt:MouseEvent)trace(外部_移出_当前,_evt.currentTarget.name,_目标,_evt.target.name)_)因为displayObject中DisplayObjectContainer(容器)对象有一个属性mouseChildren,控制子显示对象是否接受事件,一般看到上面的话,而又知道mouseChildren属性的朋友,就会有疑问了(包括

8、刚才的我),那这样我设显示对象的mouseChildren属性为false不就可以避免MOUSE_OUT事件在按钮内部触发了吗?对了,这点黑羽在最后说明白了,在某些情况下,我们需要在子显示对象上写事件的,如果设了mouseChildren为false,则很不方便了.最后,我对事件的冒泡过程不太明确,自己写了个小测试来验证了.在场景中再一个矩形影片剪辑,实例名mc双击进入后,再画一个矩形(稍小的),做成影片剪辑,实例名a这样做成了一个父子套的关系,然后写代码复制内容到剪贴板代码:mc.a.addEventListener(MouseEvent.CLICK,onFunA)mc.addEventLi

9、stener(MouseEvent.CLICK,onFunB)functiononFunA(_evt:MouseEvent)trace(_evt.currentTarget.name,_,_evt.target.name)functiononFunB(_evt:MouseEvent)trace(_evt.currentTarget.name,_,_evt.target.name)运行,在单纯mc的范围上单击,返回的target是mc,currentTarget也是mc输出结果:mc_mc而如果鼠标再移入一点,在a影片剪辑上单击的时候,事件流先到达目标阶段,触发a的侦听,然后冒泡阶段,再到mc所

10、以target一直是a,但currentTarget目标会在两次触发中分别为a(内层)和mc(外层)输出结果:a_amc_a上面这个实验就是想证明自己的一个想法,冒泡事件是否触发的顺序是从底到顶的,上面的输出证实了这点理解.这里可以返回上面看括号里的内容了,看完再接下面这段总结总结:1.事件流是面向DisplayObject的一个过程机制,但凡显示对象触发的事件,必有这个流过程,自上而下,再自下而上2.事件流机制是在同一条路径上的父子关系的显示对象都会参与的(默认)3.参与事件流的对象,对内部子对象,同样会触发MOUSE_OUT事件的4.最重要的一点就是,子对象触发的事件,只要父对象有侦听,那

11、么无论如何,父对象都会触发一次所侦听的事件而且顺序是子对象先触发事件,然后父对象再触发(这是由冒泡阶段的顺序触发的)5.将addEventListener函数中的第三个参数设为true,则只在捕获阶段侦听,对于没有子对象的元素,事件是不会触发的,只有当子对象同样侦听相同事件时,才会触发事件(因为没有目标阶段)反正要理解事件机制,三个阶段的执行顺序及执行因素理解好后,下面的原理就很好理解了如果设置addEventListener函数的第三个参数为true,会中断目标阶段的检测,但它始终会参加事件流,所以ROLL_OVER和ROLL_OUT是实现不参加事件流(捕获和冒泡均不参加)操作的方法呵呵,又加深了一点理解,开心ing.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号