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意味着侦听捕获阶段
    再简单说 新建事件不冒泡 默认侦听只侦听冒泡
  • 相关阅读:
    HGOI 20191029am 题解
    『ZJOI2019 D2T2』语言
    『NOIP 2019Day2 T3』 保卫王国(defense)
    『HGOI 20190917』Lefkaritika 题解 (DP)
    『HGOI 20190917』Cruise 题解 (计算几何+DP)
    HGOI 20190830 题解
    『Codeforces 1186E 』Vus the Cossack and a Field (性质+大力讨论)
    HGOI 20190828 题解
    BZOJ 1934 善意的投票
    BZOJ 2763 飞行路线 BFS分层
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100569.html
Copyright © 2011-2022 走看看