zoukankan      html  css  js  c++  java
  • flex 事件机制 冒泡和捕获

    发生事件时,该事件在事件流的三个阶段中移动:
    捕获阶段,该阶段从显示列表层次结构的顶部流动到目标节点之前的节点;
    目标阶段,该阶段只包括目标节点;
    冒泡阶段,该阶段从目标节点的后续节点沿显示列表层次结构向上往回流动。
    EventDispatcher 类实现 IEventDispatcher 接口,并且是 DisplayObject 类的基类。 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。
    事件目标是 Flash ® Player 事件模型的重要组成部分。

    事件目标是事件如何通过显示列表层次结构这一问题的焦点
    当发生鼠标单击或按键等事件时,Flash Player 会将事件对象调度到从显示列表根开始的事件流中
    然后该事件对象在显示列表中前进,直到到达事件目标,然后从这一点开始其在显示列表中的回程
    在概念上,到事件目标的此往返行程被划分为三个阶段:
    、、捕获阶段包括从根到事件目标节点之前的最后一个节点的行程,
    、、目标阶段仅包括事件目标节点,
    、、冒泡阶段包括回程上遇到的任何后续节点到显示列表的根。
    通常,使用户定义的类能够调度事件的最简单方法是扩展 EventDispatcher。 如果无法扩展(即,如果该类已经扩展了另一个类),则可以实现 IEventDispatcher 接口,创建 EventDispatcher 成员,并编写一些简单的挂钩,将调用连接到聚合的 EventDispatcher 中。
    二、说明 首先明确几个概念
    1、显示列表根:假如你有abc 三个panel c在b中 b在a中这样的嵌套关系 那么c-->b-->a   a就是列表的根
    2、目标:假如你在c上发了一个事件那么c就是事件的目标 有些复杂控件有click事件 不过发事件的目标不是它本身 那个currenttarget才是它本身
    3、事件传递的流程:首先你派发事件在c上 事件首先从a-->b-->c-->b-->a这样一个完整的循环
    4、捕获阶段:事件在a-->b的这个阶段(注意和b-->a不同)
    5、目标阶段 仅当事件到达c的时候
    6、冒泡阶段 b-->a这样经过的阶段
    三、具体应用
    当你在c上面派发了一个事件   然后你想在c的顶层a上监听到
    你可能这么做
    首先你在c上this.dispatchEvent(new Event("cevent",false)); 这样发了一个事件
    蓝色字体 意味着这个事件只会在捕获和目标阶段 a->b->c
    然后你在a上监听这个事件 a.addEventListener("cevent",function():void{trace("原始论坛目标发出的事件");},false);
    红色字体 意味着你打算 让侦听器只在目标或冒泡阶段处理事件 就是c->b->a
    四、简单说来就是 你发出的事件走的是a->b->c的阶段 而你侦听只想侦听b->a阶段c只走了一次所以不会检测到c的事件
    任何一个false改成true就可以了
    蓝色改成true意味着事件在所有过程传递
    红色改成true意味着侦听捕获阶段
    再简单说 新建事件不冒泡 默认侦听只侦听冒泡
  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100569.html
Copyright © 2011-2022 走看看