Flash Event事件流的三个阶段


  显示列表中事件流的三个阶段
  在一个事件的整个生命周期内,共分为三个阶段(捕获阶段-->目标阶段-->冒泡阶段): 
  1.捕获阶段(从根节点到子节点,检测对象是否注册了监听器,是则调用监听函数)
  2.目标阶段(调用目标对象本身注册的监听程序)
  3.冒泡阶段(从目标节点到根节点,检测对象是否注册了监听器,是则调用监听函数)
  注:事件发生后,每个节点可以有2个机会(2选1)响应事件,默认关闭捕获阶段。
  从上到下(从根到目标)是捕获阶段,到达了目标后是目标阶段,然后从目标向上返回是冒泡阶段。
  怎样理解事件流?
  当 事件发生时,FLEX通过事件的分发器EventDispatcher进行事件分发,分发的顺序是:从上往下到达目标,然后从下往上,从目标开始返回。如 上面1、2、3所说的那样,这里就会有一个问题,在事件的流经过程中,不是目标的对象如果注册了事件,也有了相应的事件响应函数,那么不是目标的对象响应 了事件的处理,这怎么办呢?
  由于上面说的那样,addEventListener在只有如上两个参数的牧人情况下是关闭捕获阶段的,也就是说事件流是从目标阶段开始的,然后是冒泡阶段,当出现容器包含控件的时候,可以使用判断
  if(evt.target == evt.currentTarget)
  来确定当前事件流上的当前流经对象是否就是目标对象,如果是就进行相应的处理。
  移除对象的事件流:removeEventListener(),参数与注册事件相同。
  阻断事件流中目标对象的后继事件,即通过了目标阶段后阻止冒泡阶段:
  event类的方法:public function stopImmediatePropagation():void 
  
  在捕获阶段与冒泡阶段均可能经过N个节点,在目标阶段仅可能有一个节点。
  使用stopPropagation 可阻止对事件流中当前节点的后续节点中的所有事件侦听器进行处理。使用stopImmediatePropagation 可阻止对事件流中当前节点中和所有后续节点中的事件侦听器进行处理。
  显示列表中事件流三阶段与事件机制本身没有直接关系。在AS3显示列表中,为什么要有事件流,为什么不是直接到达目标对象? 

猜你喜欢

转载自kzvyg10d.iteye.com/blog/1572938