云下的天空

坚持 随心而动 走自己的路

 

(转载)冒泡事件理解

  原文链接:http://bbs.9ria.com/viewthread.php?tid=59522

发生事件时,该事件在事件流的三个阶段中移动:
捕获阶段,该阶段从显示列表层次结构的顶部流动到目标节点之前的节点;
目标阶段,该阶段只包括目标节点;
冒泡阶段,该阶段从目标节点的后续节点沿显示列表层次结构向上往回流动。
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意味着侦听捕获阶段
再简单说 新建事件不冒泡 默认侦听只侦听冒泡

posted on 2011-06-05 18:04 天空布蓝 阅读(526) 评论(0)  编辑  收藏 所属分类: Flex4


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿

随笔分类

随笔档案

Flex学习链接

搜索

最新评论

  • 1. re: tomcat7的配置
  • 新建变量名: TOMCAT_HOME 应该为CATALINA_HOME
  • --houkai
  • 2. re: tomcat7的配置
  • 确实是的@寒澈
  • --houkai
  • 3. re: tomcat7的配置
  • @ftp123
    你娘里个大雪碧 里面会有common这个文件夹吗 不知道还尼玛在这瞎比比 纯尼玛误导人 我最恶心的就是这样没事装逼的人 艹
  • --cao
  • 4. re: tomcat7的配置
  • 从哪抄来的,是抄的,你也说声啊,要不自己测试下也可以,害人测试半天。
  • --ftp123
  • 5. re: tomcat7的配置
  • %TOMCAT_HOME%\common\lib 从tomcat6.0开始已经没有common文件夹了,直接用\lib,害我找了半天common文件夹啊,赶快改过来吧
  • --寒澈

阅读排行榜

评论排行榜