一:事件流机制
由于OOP编程将程序看成一个个对象、模块共同交流协作而提供功能或服务,这样必然会涉及对象之间交流消息的情况。所谓消息,就是指系统某处发生了什么事情,以信息的方式通知相关的对象。
AS3中采用的DOM3事件处理机制可以让交流数据的双方降低耦合度,及所谓的"脱耦"(脱离耦合性)!使得各个对象之间依赖性大大降低。
DOM3事件模型定义了一整套标准的生成和处理事件消息的方法,使程序中的对象可以相互交互、通信,保持自身状态和响应变化。
简单的说,数据的提供者只管发出数据对象,只要确保数据对象是flash.events.Event类或者子类的实例即可。
这种数据对象称为:事件(Event)。
数据对象的发出者称为:事件发送者(Event dispatcher)。
接受事件的对象称为:事件监听者(Event listener)。
DOM3事件的优点是:事件发送者和事件接收者的依赖性大大降低。
事件发送者只需要发送事件对象,
事件监听者只需要接受事件对象。 目标对象:派发事件的对象,是 Flash ?? Player 事件模型的重要组成部分
每个事件对象都有以下属性:
target:事件的派发者
currentTarget:当前正在检测的的对象,帮助跟踪事件传播的过程。
当事件发生后生成一个携带数据的事件对象,Flash Player 会将事件对象调度到从显示列表根开始的事件流中然后该事件对象在显示列表中前进,检查目标对象是否存在显示层中,并遍历从根容器一直到目标对象所在位置的所有对象(以树形势表示),自动检测所经过的节点是否注册了监听器,直到到达事件目标,然后从这一点开始其在显示列表中的回程。
1:发生事件时,该事件在事件流的三个阶段中移动:
捕获阶段:该阶段从显示列表层次结构的顶部流动到目标节点之前的节点,检测每个节点是否注册了监听器,同时,Flex 将事件对象的currentTarget 值改为当前正在检测的对象。如果注册了监听器,则调用监听函数。
目标阶段:该阶段只包括目标节点;触发在目标对象本身注册的监听程序。
冒泡阶段:从目标节点到根节点,检测每个节点是否注册了监听器,如果有,则调用监听函数。
EventDispatcher 类实现 IEventDispatcher 接口,并且是 DisplayObject 类的基类。 EventDispatcher 类允许显示列表上的任何对象都是一个事件目标,同样允许使用 IEventDispatcher 接口的方法。
2:明确几个概念
(1、显示列表根:假如你有abc 三个panel c在b中 b在a中这样的嵌套关系那么c-->b-->a
a就是列表的根
(2、目标:假如你在c上发了一个事件,那么c就是事件的目标。有些复杂控件(如Button)有click事件不过发事件的目标不是它本身那个currenttarget才是它本身
(3、事件传递的流程:首先你派发事件在c上事件首先从a-->b-->c-->b-->a这样一个完整的循环
(4、捕获阶段:事件在a-->b的这个阶段(注意和b-->a不同)
(5、目标阶段仅当事件到达c的时候
(6、冒泡阶段 b-->a这样经过的阶段
3、具体应用
当你在c上面派发了一个事件 然后你想在c的顶层a上监听到
你可能这么做
首先你在c上this.dispatchEvent(new Event("cevent",false)); 这样发了一个事件
蓝色字体意味着这个事件只会在捕获和目标阶段 a->b->c ,那个参数属性表示是否打开冒泡
然后你在a上监听这个事件 a.addEventListener("cevent",function():void{trace( "原始论坛目标发出的事件");},false);
红色字体意味着你打算让侦听器只在目标或冒泡阶段处理事件就是c->b->a ,参数属性表示是否打开捕获
4、
任何一个false改成true就可以了
蓝色改成true意味着事件在所有过程传递
红色改成true意味着侦听捕获阶段
再简单说新建事件(就是这个新建new Event("cevent",false))不冒泡默认侦听只侦听冒泡
默认情况下,捕获功能处于关闭状态,一般没有必要进行捕获跟踪。
事件只在bubbles 属性为true 时才进行冒泡,可以冒泡的事件包括:change、click、doubleClick、keyDown、keyUp、mouseDown、 mouseUp。并且不能在一个监听器中同时打开捕获和冒泡功能,要做到这一点,只能注册两个监听器,分别实现。
看一个例子:
二:addEventListener
上面的例子为例介绍:
在监听函数 pressBtn 中的属性说明: target:派发事件的目标对象
currentTarget:事件流当前正经过的目标对象
bubbles:是否打开了冒泡功能
eventPhase:事件流当前的阶段,1:捕获,2:目标,3:冒泡
addEventListener(
type:String, 事件的类型
listener:Function, 监听函数
useCapture:Boolean = false, 是否打开捕获功能。True表示捕获方式,false的话是冒泡
只有在特定状况下才会有影响,通常建议是false
priority:int = 0, 监听器优先级别
useWeakReference:Boolean = false 是否使用弱引用
)
addEventListener默认关闭了捕获阶段,打开冒泡阶段。并且捕获和冒泡阶段貌似是不能共存的。
没有捕获阶段(默认执行)具体是怎么执行的呢?
比如说有abc三个容器。同时对abc三个容器进行单击监听。
a.addEventListener(MouseEvent.CLICK,clickHandle);
b. addEventListener(MouseEvent.CLICK,clickHandle);
c. addEventListener(MouseEvent.CLICK,clickHandle);
我单击了c容器。
1、首先执行的是目标阶段。也就是我鼠标单击事件的目标是c容器,执行c容器的clickHandle函数。目标阶段完成。
2、冒泡阶段:将单击的事件冒泡上去,b获得了单击事件,执行clickHandle函数。然后就是c获得单击事件,执行clickHandle函数。
打开捕获
打开捕获阶段是怎么样的呢?
我单机了c容器。
1、捕获开始。a捕获到了单击事件执行函数。然后是b捕获到了单击事件执行函数。捕获阶段结束。
2、目标阶段开始。事件流终于流到了目标c,执行c的clickHandle函数。
总结:
1、捕获关闭后,顺序cba,由目标冒泡到父容器,一层一层上去。捕获打开后,顺序abc,由父容器一层一层下去直到目标事件。
发表评论
-
汇编写驱动(三)
2012-07-06 09:52 792我的上一篇文章, ... -
基于.net的网站信息采集系统的设计与实现
2012-07-06 09:46 5291 引言 随着WW ... -
JavaScript重构(五):利用原型和闭包,完成组件方法
2012-07-03 13:44 718终于要定义一个组 ... -
使用HTTPService读取远程XML文件为TREE赋值的例子
2012-07-02 12:55 643在FLEX4中 使用一个HTTPService 读取远程的 ... -
Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法
2012-07-02 12:55 719这段时间做个项目 ... -
重写组件遇到的问题
2012-07-02 12:55 542有时候重写组件的时候会遇到measure函数在调用 inv ... -
OpenScales入门教程:第二节 : 创建第一张地图
2012-07-02 12:55 648你需要把第一 ... -
DataGrid学习1
2012-07-02 12:54 616任务1:程序实现对dataGrid的某列进行排序操作。 ... -
深度剖析WinPcap之(十)――数据包的内核过滤(2)
2012-07-01 10:22 741在用flex杯bison开发语言处理程序时,用户先编写一个 ... -
Flex 通用的表格过滤处理
2012-07-01 10:21 598在上文"Flex AdvancedDataGri ... -
Flex4自定义事件类型Event的相关应用
2012-07-01 10:21 573基于松耦合的概念 自定义事件类型将取到很重要的作用 当您 ... -
Flex是咋回事之三 谁用谁知道
2012-07-01 10:21 607一项技术,从概念 ... -
大型 flash 游戏开发经验浅谈(webGame)
2012-06-30 16:49 764大型 flash 游戏开发经验浅谈(webGame) 201 ... -
AS3.0类库整理
2012-06-30 16:49 471AS3.0类库整理 2011年10月26日 1、as3e ... -
[转载][转载]关于flash ActionScript 3.0 的一系列有用链
2012-06-30 16:49 380[转载][转载]关于flash ActionScript 3. ... -
FLEX和Actionscript开发FLASH游戏9-2(1)
2012-06-30 16:49 230FLEX和Actionscript开发FLASH游戏9-2(1 ...
相关推荐
flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发,flex事件机制,flex事件机制的分发
Flex ActionScript3.0事件机制的Demo, 举例说明了事件的三个阶段,事件的派发,事件的侦听,事件的拦截,自定义事件等相关知识点. 以上知识点在Demo中都有体现,初学者请仔细分析代码,加强理解,多调试、修改、验证以加深...
快速掌握flex的事件机制,让你灵活运用flex的事件完成所有功能。
Flex 事件机制,flex入门学习的好帮手
Flex事件机制,其实Flex的核心就是事件,了解了其中的原理,学习起Flex就不是很难了,这篇的内容对初学者有很大的帮助,我从中受益很多,看完之后,对Flex的认识进一步加深了,很好的资料。希望对大家有所帮助。
简要说明了flex的事件流、事件处理等方面的知识。
Flex的事件机制笔记,是初级的笔记,对应初级的Flex程序员或爱好者有用
Flex4.5事件机制详细描述教程,希望能给大家帮助~~
很多新人对Flex的事件机制都不太熟悉,在使用过程中难免会出现各种问题,这是一个非常普遍的问题,为了更快更好的帮助大家,将介绍一下Flex中事件的各种机制和用法。 Flex的精髓之一就是事件和绑定机制,了解之后,...
flex 安全机制 以及代码示例全面详细解读进程之间的通讯 客户端与服务器的通讯
很多新人对Flex的事件机制都不太熟悉,在使用过程中难免会出现各种问题,这是一个非常普遍的问题,为了更快更好的帮助大家,将介绍一下Flex中事件的各种机制和用法。 Flex的精髓之一就是事件和绑定机制,了解之后,...
郑老师关于flex3事件机制的讲座,讲的很好哦!
Flex.3事件机制(3)——事件的应用实例视频Flex.3事件机制(3)——事件的应用实例视频
Flex.3事件机制(2)——Event对象视频Flex.3事件机制(2)——Event对象视频Flex.3事件机制(2)——Event对象视频
flex itemRenderer 渲染机制的概念和使用
介绍flex 的事件机制,理解flex的事件传输原理
flex打印机制,使用flex内置打印容器类解决打印问题。
此往篇文档非常清淅的讲解在flex中的事件机制,告诉你target与currenttarget的区别
flex封装需要用到自定义事件这方面知识,在这里就简单介绍一下FLEX自定义事件,感兴趣的朋友可以参考下