`
saboo
  • 浏览: 71621 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[转]AS3事件处理机制

    博客分类:
  • Flex
阅读更多

先来看个例子:
地点:饭馆类(extend Sprite or UIcomponent...,是个容器就行)
人物:客人类(extend EventDispatcher,会说话就行)、厨师类(extend Object,能

满足客人需求就行)

一、四个步骤:注册侦听、分发事件、侦听事件、移除侦听。
(1)、注册侦听:客人进入饭馆,使用addEventListener指定某厨师准备做菜。
(2)、分发事件:客人使用dispatchEvent对厨师进行喊话,表示我要吃什么。喊话内

容被放在Event类或其子类里,主要包括类型、目标和数据三部分。类型(Type)就是点

菜,而不是结账,上酒水。目标(Target)用来记录是哪桌的客人。数据(Data)用来保

存重要信息,如果是点菜,那记的就是菜名。
(3)、侦听事件:根据注册侦听中的需求,厨师开始做菜。
(4)、移除侦听:不移除的后果就是,以后在任意餐馆里喊话叫菜,所有注册过侦听的

餐馆厨师都开始做菜。
一些细节:
(1)、为了方便客人类在饭馆类中使用MXML标签注册侦听,常常在客人类中使用Event

标签。比如[Event(name="onChange", type="components.MyEventTest")]
(2)、注册侦听时,可以使用弱引用,即更改addEventListener中的useWeakReference

属性的默认值false为true。这样垃圾回收器会检测弱引用侦听并自动移除,极其不建

议这样做,而是直接移除侦听。
(3)、当客人类已经继承了某类,无法再继承EventDispatcher时,可以考虑实现

IEventDispatcher接口。额外地,需要实现此接口定义的五个方法addEventListener

、dispatchEvent、willTrigger、removeEventListener和hasEventListener。当然,

在实现过程中,可以灵活地添加别的新特性。

二、事件流机制
(1)、捕获阶段:Flash Player会按照显示列表,从根容器舞台往下找,直到确定是哪

个桌的客人在喊话要菜。
(2)、目标阶段:捕获阶段结束时停在哪个目标对象上。
(3)、冒泡阶段:事件对象从目标对象再次沿显示列表往上移动至根容器舞台,遇到注

册侦听的节点就调用侦听函数。如果想中途中断冒泡,可以使用stopPropagation,详

见文末Event备注部分。
一些细节:
(1)、这三个阶段由Event中的eventPhase属性来记录,1表示捕获,2表示目标,3表示

冒泡。
(2)、目标阶段确定的目标对象由Event中的target属性来记录,冒泡阶段移动的游标

则由currentTarget来记录。事件对象每往上移动一级,就会克隆出一个仅与前副本

currentTarget不同的新副本。这也提示我们,在自定义Event类时,如果打开了冒泡

属性bubbles,则必须要覆盖原有的clone方法,否则在冒泡时就会丢失自定义的存储

数据。同样,最好也覆盖原有的toString方法。
(3)、侦听器的调用一般发生在冒泡阶段。但是当target等于currentTarget,也就是

当前侦听对象就是事件发生对象时,冒泡阶段就没有了,这时目标阶段就发生了侦听

器调用。如果希望在捕获阶段侦听事件,将addEventListener中的useCapture参数改

为true即可,这时冒泡阶段将不再发生侦听。如果希望仍在冒泡阶段继续侦听,需要

新添加一个useCapture为默认值false的侦听。
(4)、事件对象是否可以冒泡要看两点:第一,事件本身是否支持冒泡,由bubbles属

性设定,为true则支持,默认为false;第二,如果事件发生的对象不在显示列表中,

也不可能冒泡,此时只有目标阶段,如Timer和URLLoader。
(5)、显示列表下,某个容器中有两个并列子节点1和2。如果子节点1发出事件,需要

在子节点2中进行侦听,默认情况下是做不到的。常用的一种办法是向子节点1和子节

点2都传入一个相同的对象的实例,在子节点1中用这个对象实例发出事件,在子节点2

中用这个对象实例监听事件(在目标阶段捕获事件)。这样就可以收到字节点1的事件

了。

三、Event备注
属性:
bubbles:只读,布尔,事件是否开启冒泡功能 
cancelable:只读,布尔,处理事件的默认行为是否可以停止。主要针对一些系统事

件,如果值为true,则Event的preventDefault方法可以使用,否则不可用。 
currentTarget:只读,对象,当前正在调用监听器的对象 
eventPhase:只读,整数,返回事件流正经历的阶段。1:捕获,2:目标,3:冒泡 
target:只读,派发事件的目标对象 
type:只读,字符,事件类型。比如鼠标点击事件的类型:click,并被定义为常量:

MouseEvent.CLICK

构造函数:
Event(
  type:String,    事件类型
  bubbles:Boolean = false,   是否冒泡
  cancelable:Boolean = false  是否可以停止
)

方法:
isDefaultPrevented:判断preventDefault 是否已经被调用
preventDefault:停止事件的默认行为。针对一些系统事件,cancelable为true时才

可用。 
stopImmediatePropagation:停止当前的事件流传播,包括当前正在处理的对象 
stopPropagation:停止当前的事件流传播,但不会停止当前正在处理的对象

四、侦听器备注

addEventListener(
  type:String,    事件的类型
  listener:Function,    监听函数
  useCapture:Boolean = false,    是否打开捕获功能 
  priority:int = 0,    监听器优先级别
  useWeakReference:Boolean = false    是否使用弱引用
)

默认情况下,Flex会按照监听器注册的顺序来调用监听函数。使用addEventListener

函数的priority 来实现 监听函数的优先级。priority 为整数类型,数字越大,级别

越高。级别最高的最先被调用。已经存在的监听器,无法被修改优先级。使用MXML添

加的事件监听函数无法指定优先级别,将采用默认的级别。给一个对象注册多个监听

器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已

经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。

 

分享到:
评论

相关推荐

    AS3中的事件处理.txt

    本文将深入探讨AS3中的事件处理机制及其应用,并通过一个具体的示例来阐述如何在实际开发过程中运用这些概念。 ### 一、AS3中的事件处理机制 #### 1.1 事件处理的重要性 事件处理在AS3中扮演着极其重要的角色。它...

    AS2转AS3教程下载

    4. 事件处理:AS3的事件处理机制更为规范,需要熟悉addEventListener和removeEventListener方法。 5. 动画和时间轴控制:AS3的动画和时间轴控制与AS2不同,不再依赖于时间轴,而是通过编程实现。 6. 显示对象层次:...

    仿AS3实现PHP 事件机制实现代码

    这一机制是仿照ActionScript 3(AS3)的事件处理模型设计的。在AS3中,事件机制是基于事件监听和广播的模式,允许开发者将特定事件与处理这些事件的方法或函数关联起来。虽然PHP是一种主要用于服务器端编程的语言,...

    as3事件属性

    在ActionScript 3.0 (简称AS3)中,事件处理机制是程序设计的核心之一。掌握AS3中的事件属性及其应用场景对于开发高质量的交互式应用程序至关重要。本文将深入探讨AS3事件流中的两个关键属性——`target`与`...

    as3 利用简单的事件处理作的小游戏

    在这个“as3 利用简单的事件处理作的小游戏”中,开发者显然使用了AS3的核心特性来构建一个游戏。下面我们将深入探讨AS3中的事件处理及其在游戏开发中的应用。 在AS3中,事件处理是实现用户交互的关键部分。当用户...

    flash as3 的例子

    在“test”这个文件中,可能包含了各种使用AS3事件处理的示例代码,比如按钮点击事件、键盘输入事件或定时器事件的处理。通过对这些例子进行学习和实践,开发者可以更好地理解和掌握AS3中的事件机制,从而提升在...

    第五节 AS3事件.docx

    总之,AS3事件机制是通过`addEventListener`方法注册事件处理函数,使用预定义的事件常量来指定事件类型。理解并熟练运用事件处理是AS3开发的关键技能之一,它使得代码更加模块化,易于维护和扩展。在实际开发中,应...

    as3 视频播放器 纯as3

    9. **错误处理**:处理可能出现的加载失败、播放错误等异常情况也是播放器开发的重要部分,需要设置适当的错误监听和处理机制。 综上所述,这个“AS3 视频播放器 纯AS3”项目是一个学习和实践AS3视频处理能力的好...

    Flash CS3 +AS3键盘事件

    通过以上内容,我们了解了Flash CS3与AS3中的键盘事件处理机制,这为创建丰富的交互体验奠定了基础。实际应用中,开发者可以根据需求进行更复杂的逻辑设计,如组合键、延迟处理、按键持续时间等。结合`keyCodes.fla`...

    Flash AS3 中文帮助文档

    3. **事件处理**:AS3引入了事件驱动模型,通过addEventListener、removeEventListener和dispatchEvent方法处理用户交互和其他事件。事件机制增强了程序的响应性和可扩展性。 4. **ActionScript 3.0的核心类库**:...

    Java转AS3.0工具

    - **异常处理**:Java的try-catch-finally转换为AS3.0的错误处理机制。 - **生成AS3.0代码**:完成所有转换后,生成AS3.0的源代码文件。 4. **相关工具和库** - **J2AS3**:一个可能的Java转AS3.0工具名称,它...

    基于flash(as3)做的鼠标跟随旋转示例【附源码】

    2. **事件监听**: 在AS3中,事件驱动编程是核心机制之一。在这个示例中,我们可能会看到`Event.MOUSE_MOVE`事件被监听,当鼠标在舞台上移动时,对应的处理函数会被调用,实现对象的跟随旋转。 3. **坐标系统**: ...

    as3殿堂之路 源码 全集

    3. **事件处理**:AS3的事件驱动模型是其重要特性之一。源码可能涉及到Event类、addEventListener方法、removeEventListener方法以及事件处理函数的编写。 4. **图形绘制**:AS3提供了Graphics类,用于在舞台上绘制...

    FLASHAS3代码

    5. 事件模型:AS3采用了基于事件的编程模型,事件监听和分发机制让程序响应用户交互和系统变化。如点击按钮、加载完成等事件,都可以通过addEventListener()和removeEventListener()来处理。 五、图形绘制 6. 可...

    事件机制 观察者模式

    通过以上步骤,我们就建立了一个简单的AS3事件处理机制,遵循观察者模式。这个机制使得代码更加模块化,降低了对象间的耦合度,提高了代码的可维护性和可扩展性。在实际项目中,可以根据需求扩展事件类型和监听器,...

    as3 chm as3.chm 帮助文档

    2. **事件驱动编程**:AS3中的事件模型是其核心机制之一,允许响应用户交互或其他程序事件。事件监听器注册(addEventListener)和移除(removeEventListener)是处理事件的关键。 3. **显示列表**:AS3的显示列表...

    UDP.rar_as3 udp_flash as3.0 UDP_flash发送udp_udp as3_windows as3.0

    AS3为开发者提供了Socket类来处理TCP连接,但同时也提供了NetConnection类来处理UDP通信。NetConnection类允许创建到服务器的连接,并可以用来发送和接收UDP数据包。 这个"UDP.rar_as3 udp_flash as3.0 UDP_flash...

Global site tag (gtag.js) - Google Analytics