`

事件的内核结束,详解捕获,冒泡

    博客分类:
  • FLEX
阅读更多
Flex事件的传播路径
<mx:Application>
<mx:Panel>
<mx:VBox>
<mx:button id=”btn1”>

</mx:button>
</mx:VBox>
</mx:Panel>
</mx:Application>

如果最内层的按钮发出事件,那么事件传播路径就是
application->panel->vbox->button,事件的传播路径是唯一的

事件的传播依次经历“捕获”,“目标”,“冒泡”,“目标”四个阶段

捕获和目标(从外到内)
如上段代码中的btn1发出事件,最外层appliaction检查自身是否定义了时间A的捕捉者;如果定义了捕获者,随即响应;如果没有定义,事件继续想内层传播。依次向内传播,当传播到Vbox,事件传播路径走到尽头,捕捉阶段结束

目标和冒泡(触发事件捕获者来捕捉事件,同时沿着路径继续向上传播)
Btn1最新捕捉到事件,随即响应,事件好不等待,继续向外层冒泡。依次向往传播事件。




事件流呈现V字形,事件对象沿着传播路径先由外向内传播,然后再由内向外传播。无论捕捉还是冒泡,两个阶段中都能通过“目标”捕捉到事件对象,最常用的是在冒泡阶段对事件捕捉。

注意:
1、 如果在捕捉/目标阶段捕捉事件,那么冒泡、目标阶段将无效,不能捕捉事件;反之依然
2、 如果想捕捉两阶段的同一事件,则可以变相通过定义多个事件捕捉者来实现


发出事件:
  事件发起者.dispatchEvent(事件对象)
通过此方法把事件对象传播出去
Button1.dispatchEvent(myevent);
捕捉时间:
  事件捕捉者.addEventListener(事件名称,响应函数);
  事件捕捉者监听某事件是否传递到此,捕捉到该事件后,把事件作为参数给响应者处理
  Panel.addEventListener(event1.EVENT_NAME,handdle);
事件传播过程中当前经过的对象:
事件对象.currentTarger.id
事件在传播路径上传播,被一个捕捉着捕捉到,id就是该捕捉者的id
在捕捉/目标阶段捕捉事件,需要设置addEventListener的第三个参数为true,默认为false
Panel.addEventListener(event1. EVENT_NAME,handle,true);
在冒泡阶段捕捉事件,需要在定义事件的时候,显式地设置基类的构造函数的第二个参数为true,这样该事件就会向外层冒泡.
  Super(par_eventName,true);
  同时,addEventListener函数的第三个参为false。
  Panel.addEventListener(event1. EVENT_NAME,handle,false);
在冒泡和捕捉阶段都捕捉事件
需要在定义事件时,显式地设置基类的构造函数的第二个参数为true,这样该事件就会向外层冒泡.
  Super(par_eventName,true);
  同时编写两个同一事件的监听函数addEventListener,其中useCapture即第三个参数为true,另一个为false,响应函数可以相同,也可以不同。
Panel.addEventListener(event1. EVENT_NAME,handle,true);
Panel.addEventListener(event1. EVENT_NAME,handle,false);

Panel.addEventListener(event1. EVENT_NAME,handle1,true);
Panel.addEventListener(event1. EVENT_NAME,handle2,false);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics