- 浏览: 125238 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhanchaojiang:
...
Flash使用到数学、物理的公式 -
沈冠军:
太好啦,呵呵···
用Flex Builder创建第一个Flex AIR程序 -
zht110227:
代码能加上点注释吗?看着效果更好。
Flex的通信方式(N)——URLLoader -
yangkd548:
可能是SWF是2.0的原因吧,你用3.0的试试吧
Flex与Flash的交互_1(初级简单示例) -
aotie:
你好我套用你的模式!做为什么这句 flashMc=flashC ...
Flex与Flash的交互_1(初级简单示例)
1.先说一些基础的东西(直接从网上copy过来)
(1) 事件是一个对象,它由flash play产生和管理。事件流分捕获阶段,目标阶段和冒泡阶段。事件流的示意图如下,这里说明一下target和 currentTarget的概念。当一个事件流产生时,就产生了一个显示对象列表,而target是最里层的对象,而 currentTarget是捕获阶段和冒泡阶段被"遍历"的显示对象,当然它只有注册了时间监听器,我们才能获得 event.currentTarget。
(2)
(3)不是所有的事件都有这三个阶段。如Timer、URLLoader,它们的事件对象将直接派送给目标对象(target).它们只包含目标阶段而没有捕获阶段和冒泡阶段。它们不会像显示对象容器(DisplayObjectContainer)那样有可能被一个DisplayObjectContainer对象包含或者自己包含一个DisplayObjectContainer对象,它们往往是单独存在的。也就是说如果一个显示对象不在显示列表中时,FlashPlaye会把事件直接派送给它,这个时候就没有事件流,也没有捕获阶段和冒泡阶段,只有目标阶段。
(1)请仔细看上面的图中的事件流,图中的假定的事件派发的对象是子节点1,从图中我们可以看出,事件流并没有经过子节点2,也就是说如果子节点2中监听事件,那子节点无法监听到事件。
(2)如果如果父节点监听子节点1的事件可以监督到吗?当然可以因为事件流有经过父节点;有两种方式可以监听到子节点1的事件:
自定义事件:
1)在父节点里面用子节点监听事件(如子节点1.addEventListener(。。。。))此时不需要设置addEventListener中的useCapture参数和new Event时Event的bubbles参数。就可以直接监听到子节点1的事件,因为此时直接在目标阶段捕捉事件。
2)直接用在父节点中加入但是addEventListener(。。。)也可以监听子节点1的事件,但是前提条件是在父节点监听事件的时候要把addEventListener中的useCapture参数设置成true(如addEventListener(MenuEvent.MENU_Event, handler,true)或者字节点1中new Event时将Event的bubbles参数设置为true( new MenuEvent(MenuEvent.MENU_Event,true))。如果都不这样的话,父节点是无法监听到事件的。
因为addEventListener中的useCapture的default模式是false也就是侦听器只在目标或冒泡阶段处理事件,而new Event时将Event的bubbles参数default也是false也就是说不参与事件流的冒泡阶段。如果不设置useCapture或者bubbles为true那父节点肯定无法监听到事件。
(3)如果非要在子节点2中监听子节点1中发出的事件怎么办?
1)办法有很多种,说一下最常用的一种,就是向子节点1 与子节点2 都传入一个相同的对象的实例,在子节点1中用这个对象实例发出事件,在子节点2中用这个对象实例监听事件(在目标阶段捕获事件)。这样就可以收到字节点1的事件了。
非自定义事件(如mouseEvent):
1)当是非自定义事件时。直接用在父节点中加入但是addEventListener(。。。)就可以监听子节点1的事件。
2)有人可能要问如果我要在子节点2监听子节点1的非自定义事件呢?可以用(上面的2 标题里面 3)),但是完全没有必要,比如,你说你在子节点2中监听子节点1的mouseClick 事件干吗??
摘录Flash帮助文档中的规范解释:
addEventListener () 方法
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
语言版本 : ActionScript 3.0
RuntimeVersions: AIR 1.0, Flash Player 9
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表的所有节点上注册事件侦听器。
成功注册一个事件侦听器后,无法通过额外调用 addEventListener() 来更改其优先级。要更改侦听器的优先级,必须首先调用 removeListener()。然后,可以使用新的优先级再次注册该侦听器。
请记住,注册该侦听器后,如果继续调用具有不同 type 或 useCapture 值的 addEventListener(),则会创建单独的侦听器注册。例如,如果首先注册 useCapture 设置为 true 的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener(),并将 useCapture 设置为 false,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。
不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。
如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。
如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。
参数 type:String — 事件的类型。
listener:Function — 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示:
function(evt:Event):void函数可以有任何名称。
useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.
priority:int (default = 0) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
useWeakReference:Boolean (default = false) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。
类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。
(1) 事件是一个对象,它由flash play产生和管理。事件流分捕获阶段,目标阶段和冒泡阶段。事件流的示意图如下,这里说明一下target和 currentTarget的概念。当一个事件流产生时,就产生了一个显示对象列表,而target是最里层的对象,而 currentTarget是捕获阶段和冒泡阶段被"遍历"的显示对象,当然它只有注册了时间监听器,我们才能获得 event.currentTarget。
(2)
<1> 捕获阶段 (EventPhase.CAPTURING_PHASE)包括从舞台到目标节点范围内的所有节点 <2> 目标阶段 (EventPhase.AT_TARGET)权包括目标节点 <3> 冒泡阶段 (EventPhase.BUBBLING_PHASE)从目标节点的父节点返回到舞台的行程中遇到的节点
(3)不是所有的事件都有这三个阶段。如Timer、URLLoader,它们的事件对象将直接派送给目标对象(target).它们只包含目标阶段而没有捕获阶段和冒泡阶段。它们不会像显示对象容器(DisplayObjectContainer)那样有可能被一个DisplayObjectContainer对象包含或者自己包含一个DisplayObjectContainer对象,它们往往是单独存在的。也就是说如果一个显示对象不在显示列表中时,FlashPlaye会把事件直接派送给它,这个时候就没有事件流,也没有捕获阶段和冒泡阶段,只有目标阶段。
(1)请仔细看上面的图中的事件流,图中的假定的事件派发的对象是子节点1,从图中我们可以看出,事件流并没有经过子节点2,也就是说如果子节点2中监听事件,那子节点无法监听到事件。
(2)如果如果父节点监听子节点1的事件可以监督到吗?当然可以因为事件流有经过父节点;有两种方式可以监听到子节点1的事件:
自定义事件:
1)在父节点里面用子节点监听事件(如子节点1.addEventListener(。。。。))此时不需要设置addEventListener中的useCapture参数和new Event时Event的bubbles参数。就可以直接监听到子节点1的事件,因为此时直接在目标阶段捕捉事件。
2)直接用在父节点中加入但是addEventListener(。。。)也可以监听子节点1的事件,但是前提条件是在父节点监听事件的时候要把addEventListener中的useCapture参数设置成true(如addEventListener(MenuEvent.MENU_Event, handler,true)或者字节点1中new Event时将Event的bubbles参数设置为true( new MenuEvent(MenuEvent.MENU_Event,true))。如果都不这样的话,父节点是无法监听到事件的。
因为addEventListener中的useCapture的default模式是false也就是侦听器只在目标或冒泡阶段处理事件,而new Event时将Event的bubbles参数default也是false也就是说不参与事件流的冒泡阶段。如果不设置useCapture或者bubbles为true那父节点肯定无法监听到事件。
(3)如果非要在子节点2中监听子节点1中发出的事件怎么办?
1)办法有很多种,说一下最常用的一种,就是向子节点1 与子节点2 都传入一个相同的对象的实例,在子节点1中用这个对象实例发出事件,在子节点2中用这个对象实例监听事件(在目标阶段捕获事件)。这样就可以收到字节点1的事件了。
非自定义事件(如mouseEvent):
1)当是非自定义事件时。直接用在父节点中加入但是addEventListener(。。。)就可以监听子节点1的事件。
2)有人可能要问如果我要在子节点2监听子节点1的非自定义事件呢?可以用(上面的2 标题里面 3)),但是完全没有必要,比如,你说你在子节点2中监听子节点1的mouseClick 事件干吗??
摘录Flash帮助文档中的规范解释:
addEventListener () 方法
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
语言版本 : ActionScript 3.0
RuntimeVersions: AIR 1.0, Flash Player 9
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。可以为特定类型的事件、阶段和优先级在显示列表的所有节点上注册事件侦听器。
成功注册一个事件侦听器后,无法通过额外调用 addEventListener() 来更改其优先级。要更改侦听器的优先级,必须首先调用 removeListener()。然后,可以使用新的优先级再次注册该侦听器。
请记住,注册该侦听器后,如果继续调用具有不同 type 或 useCapture 值的 addEventListener(),则会创建单独的侦听器注册。例如,如果首先注册 useCapture 设置为 true 的侦听器,则该侦听器只在捕获阶段进行侦听。如果使用同一个侦听器对象再次调用 addEventListener(),并将 useCapture 设置为 false,那么便会拥有两个单独的侦听器:一个在捕获阶段进行侦听,另一个在目标和冒泡阶段进行侦听。
不能只为目标阶段或冒泡阶段注册事件侦听器。这些阶段在注册期间是成对出现的,因为冒泡阶段只适用于目标节点的始祖。
如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
如果在正在处理事件的节点上注册事件侦听器,则不会在当前阶段触发事件侦听器,但会在事件流的稍后阶段触发,如冒泡阶段。
如果从正在处理事件的节点中删除事件侦听器,则该事件侦听器仍由当前操作触发。删除事件侦听器后,决不会再次调用该事件侦听器(除非再次注册以备将来处理)。
参数 type:String — 事件的类型。
listener:Function — 处理事件的侦听器函数。此函数必须接受 Event 对象作为其唯一的参数,并且不能返回任何结果,如下面的示例所示:
function(evt:Event):void函数可以有任何名称。
useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false.
priority:int (default = 0) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。
useWeakReference:Boolean (default = false) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。
类级别成员函数不属于垃圾回收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持永久。
发表评论
-
Flash Builder 4 安装SVN
2010-11-28 00:48 1388选择菜单 帮助–> 安装新软件 在使用里键入地址: ... -
FLEX 为DataGrid 添加序号列(1)
2010-05-11 10:49 3962下面的实现方式,基本思路就是用itemrender访问父文档的 ... -
Flex设定Textinput圆角矩形输入框(转)
2010-05-07 20:20 4878(英文)原文地址 1、以下的例子展示如何通过设置focus ... -
Flex程序启动事件的顺序initialize、creationComplete、applicationComplete(转)
2010-05-06 20:01 2272<?xml version="1.0&qu ... -
用Flex Builder创建第一个Flex AIR程序
2010-04-30 10:20 1623创建一个AIR工程 先安装好Adobe AIR运行时以及设置 ... -
target和currentTarget的区别
2010-04-26 23:08 1500target和currentTarget的区别 ... -
跨域策略文件——解决Flash安全沙箱问题
2010-04-26 16:20 3483一、基础解说 用 Flash 文档访问另一个域中的数据。F ... -
Flash Builder 入门学习资源
2010-04-06 13:48 1984Flash Builder 资源 Flash Builder ... -
Flex 开源框架及工具 整理和更新转帖
2010-03-23 13:06 10611.Caringorm 2.PureMVC 3.Mode ... -
Flex的通信方式(N)——URLLoader
2010-02-10 16:01 1439URLLoader交互的例子 < ... -
flex amf的使用
2009-12-07 15:32 5231AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序 ... -
Flex设置TextInput的默认焦点、切换焦点的例子
2009-11-29 11:03 85751、首先,在加载swf的页面上写下下面的代码,控制页面将焦点设 ... -
Flex与Flash的交互_2(深层对象交互示例)
2009-11-25 11:37 1820Flex端程序 1、主程序文件TestFlex_Flash ... -
Flex与Flash的交互_1(初级简单示例)
2009-11-25 10:26 3113其实就是Flex将Flash以资源的形式加载到Flex项目中, ... -
Flex的通信方式(五)——HTTPService_3
2009-11-23 19:42 2189转载自:http://hi.baidu.com ... -
Flex的通信方式(四)——HTTPService_2
2009-11-23 19:08 1443转载自:http://cs.ntsky.com/flex3-j ... -
Flex的通信方式(三)——HTTPService_1
2009-11-18 13:38 1496MXML代码: <?xml version ... -
Flex的通信方式(二)——Webservice-2
2009-11-18 12:47 1082这里主要介绍Webservices使用AS代码的操作方法 A ... -
Flex的通信方式(一)——Webservice-1
2009-11-18 12:12 2083flex与Webservices与简单通信 1、格式: f ... -
在ActionScript工程中中实现绑定
2009-09-28 15:17 1254在ActionScript中实现绑定 这种方法是使用mx.bi ...
相关推荐
flash事件侦听机制,事件流,捕捉机制,事件处理
摘要 1、绪论 ... 2、AS3的事件侦听机制 3、在AS3中改变对象的位置和缩放对象 4、演示 3、XML的运用 1、新建FLASH 2、创建 viewer.as 的类 3、创建pics,xml 的文件 4、总结 5、致谢 6、参考文献
flash强大事件机制扩展类,来自蓝色理想论坛,与各位flash爱好者分享
全书内容包括ActionScript 3.0 语言介绍、ActionScript3.0基本语法、事件机制、面向对象、数组、正则表达式、XML应用、常用的内置类、基本组件、数据列表组件、 DataGrid组件、文本处理、绘图、几何结构、音频、视频...
第1~5章介绍了 ActionScript 3.0的基础知识,包括程序编写界面、数据结构、基本语法以及事件机制;第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、...
该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。 类的代码如下: public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash { //定义一个公共...
第1~5章介绍了 ActionScript 3.0的基础知识,包括程序编写界面、数据结构、基本语法以及事件机制;第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、...
摘 要:F1ash做为目前最流行的动画制作软件,其就业市场相当广泛,因而在各大院校计算机专业全部将该课程列为专业主干课,非计算 机专业也多将此课程列为选修课,以拓宽学生的就业途径。...事件机制
第1~5章介绍了ActionScript 3.0的基础知识,包括程序编写界面、数据结构、基本语法以及事件机制;第6~9章介绍了ActionScript 3.0的核心——类及以类为基础的面向对象程序设计方法,包括类的基本概念、ActionScript...
EventDispatcher为常规的Lua对象提供了广播器/侦听器事件机制。 Corona SDK开发人员可以编写更简洁的面向对象的代码,该代码不依赖于从显示对象或自定义消息的全局运行时发送消息。 该模块在Corona SDK和其他可能...
SWFUpload最初是由Vinterwebb.se开发的一...不幸的是Flash Player 10 更严格的安全机制迫使我们不得不将一个Flash Button放入Flash影片中。SWFUpload提供API供开发者通过图片、文字、CSS的方式来自定制更灵活的UI显示。
SWFUpload最初是由Vinterwebb.se开发的一...不幸的是Flash Player 10 更严格的安全机制迫使我们不得不将一个Flash Button放入Flash影片中。SWFUpload提供API供开发者通过图片、文字、CSS的方式来自定制更灵活的UI显示。
小型轻便的 canvas 图形框架,支持像操作dom一样的 进行canvas编程, 在canvas开发中的对象模型和事件绑定机制拉到了和 dom svg 等开发的同等水平,那么,你还在犹豫什么。 标签:Canvax
LionEvents LionEvents是一个模仿Adobe Flash Acrionscript 3.0中事件机制的框架。最大的优点是没有选择器,也没有带前缀@obj的私有函数。 使用LionEvents,您可以进行更有效的封装,并降低耦合度。 LionEvents提供...
jquery.zeroclipboard ...ZeroClipboard需要使用Flash Player 11.0.0或更高版本。 有关基础机制的更多详细信息,请参见 。 通过ZeroClipboard v2.x的智能默认配置值以及内部覆盖一些配置选项,使得该插件
1.4.3 Flash中的事件机制 1.5 小结 第2章 Flex企业应用开发基础 2.1 MXML语言 2.1.1 用MXML表示ActionScript对象 2.1.2 查看由MXML文件所翻译的ActionScript代码 2.1.3 IMXMLObject接口 2.2 ...
1.4.3 Flash中的事件机制 1.5 小结 第2章 Flex企业应用开发基础 2.1 MXML语言 2.1.1 用MXML表示ActionScript对象 2.1.2 查看由MXML文件所翻译的ActionScript代码 2.1.3 IMXMLObject接口 2.2 ...
蓝牙4.0 BLE center与peripheral建立连接绑定过程 2 蓝牙4.0 BLE peripheral 广播设置 7 ...蓝牙4.0 BLE key处理过程看任务、事件、消息机制 50 CC254x 内部存储结构 FLASH 53 蓝牙4.0 BLE FLASH 操作 58
Gaia强大的自定义和事件侦听功能使用户可以很方便的更改网站逻辑。此外Gaia还整合了SWFAddress,GreenShock Tween,采用MVC,Singleton等设计模式和业界流行的最佳解决方案(Best Practice)。Gaia还提供了配套的...