- 浏览: 46636 次
- 性别:
- 来自: 苏州
最新评论
Flex事件机制一
- 博客分类:
- 技术杂绘
一:事件流机制
由于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,由父容器一层一层下去直到目标事件。
发表评论
-
【转载】C#写的字符串截取函数
2012-07-06 09:52 640字符串截取函数 public string CutS ... -
Spring AOP中RegexpMethodPointCut使用的正则表达式用法
2012-07-06 09:45 642正则表达式: .:匹配任何单个字符 例如:setF. ... -
一个判断是否为质数的正则表达式
2012-07-06 09:37 808源地址:http://www.cnblogs.com/Gr ... -
Asp.Net2.0之WebPart
2012-07-06 09:30 591WebPart组件包括 2个WebPart管理组件:Web ... -
权限移动
2012-07-05 20:45 519=0; i--){ var option = sele ... -
关于Flash CS5 自己编写组件的教程
2012-07-03 13:43 506flash cs5 在自己制作图形组件时非常简单。比FLE ... -
ext4表单实例
2012-07-02 10:55 538不说废话,直接贴代码和截图 width: 78 ... -
用SpringGraph制作拓扑图和关系图
2012-07-02 10:55 573SpringGraph是Adobe的Flex 2.0的开源 ... -
使用flash buidler 4制作一个迅雷快车旋风地址转换(附源代码)
2012-07-02 10:55 584纪念独立博客开博一周年,并且纪念下一年前学习flex,特弄 ... -
让数据自己来讲故事
2012-07-02 10:55 517Adobe Flash Builder 4 简 ... -
通过Flash实现ASP.NET多文件上传
2012-07-01 00:35 517关于多文件上传, ... -
Flex应用开发内存检测及优化技巧
2012-07-01 00:35 499我试着抛砖引玉, ... -
【Flex】MXML转化AS
2012-07-01 00:35 602文章分类:Web前端 MXML是一种用于创建用户界面的功能 ... -
PHP作为Flex程序的数据源
2012-07-01 00:35 572Adobe Flash Builder 4 简体中文正式版 ...
相关推荐
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自定义事件,感兴趣的朋友可以参考下