全面了解一下AS中的事件处理方法

全面了解一下AS中的事件处理方法

全面了解一下ActionScript中的事件处理方法,以前的..现在的.. 全是copy帮助(chm)

位置:ActionScript 3.0 编程>处理事件 >ActionScript 3.0 事件处理与早期版本事件处理的不同之处

ActionScript 3.0 之前的 ActionScript 版本中提供许多不同的方法来处理事件:

1.on() 事件处理函数,可以直接放在 Button 和 MovieClip 实例上
2.onClipEvent() 处理函数,可以直接放在 MovieClip 实例上
3.回调函数属性,例如 XML.onload 和 Camera.onActivity
4.使用 addListener() 方法注册的事件侦听器
5.部分实现了 DOM 事件模型的 UIEventDispatcher 类
其中的每一种机制都有其自己的若干优点和局限性。on() 和 onClipEvent() 处理函数易于使用,但使随后对项目的维护变得较为困难,因为很难查找直接放在按钮和影片剪辑上的代码。回调函数也很容易实现,但对于任何指定事件,仅限于使用一个回调函数。事件侦听器较难实现:它们不但要求创建侦听器对象和函数,而且要求向生成事件的对象注册侦听器。这虽然增加了开销,但您可以创建若干侦听器对象,并针对同一个事件注册这些对象。

对 ActionScript 2.0 组件的开发形成了另一个事件模型。该新模型包含在 UIEventDispatcher 类中,并且基于 DOM 事件规范的子集。熟悉组件事件处理的开发人员将会发现过渡到新的 ActionScript 3.0 事件模型相对来说较为容易。

遗憾的是,各个事件模型使用的语法以不同的方式相互重叠,并且在其它方面各自不同。例如,在 ActionScript 2.0 中,某些属性(例如 TextField.onChanged)可用作回调函数或事件侦听器。但是,根据您是否在使用支持侦听器或六个类之一的 UIEventDispatcher 类,用于注册侦听器对象的语法有所不同。对于 Key、Mouse、MovieClipLoader、Selection、Stage 和 TextField 类;请使用 addListener() 方法,但对于组件事件处理,请使用名为 addEventListener() 的方法。

不同事件处理模型所导致的另一个复杂性是:根据所使用的机制的不同,事件处理函数的范围大不相同。也就是说,关键字 this 的含义在各个事件处理系统中并不一致。

ActionScript 3.0 中的事件处理

ActionScript 3.0 引入了单一事件处理模型,以替代以前各语言版本中存在的众多不同的事件处理机制。该新事件模型基于文档对象模型 (DOM) 第 3 级事件规范。虽然 SWF 文件格式并不专门遵循文档对象模型标准,但显示列表和 DOM 结构之间存在的相似性足以使 DOM 事件模型的实现成为可能。显示列表中的对象类似于 DOM 层次结构中的节点,在本讨论中,术语”显示列表对象”和”节点”可互换使用。

Flash Player 实现的 DOM 事件模型包括一个名为”默认行为”的概念。”默认行为”是 Flash Player 作为特定事件的正常后果而执行的操作。

默认行为
开发人员通常负责编写响应事件的代码。但在某些情况下,行为通常与某一事件关联,使得 Flash Player 会自动执行该行为,除非开发人员添加了取消该行为的代码。由于 Flash Player 会自动表现该行为,因此这类行为称为默认行为。

例如,当用户在 TextField 对象中输入文本时,普遍期待文本将在该 TextField 对象中显示,因此该行为被内置到 Flash Player 中。如果您不希望该默认行为发生,可以使用新的事件处理系统来取消它。当用户在 TextField 对象中输入文本时,Flash Player 创建 TextEvent 类的实例以表示该用户输入。为阻止 Flash Player 显示 TextField 对象中的文本,必须访问该特定 TextEvent 实例并调用该实例的 preventDefault() 方法。

并非所有默认行为都可以阻止。例如,当用户双击 TextField 对象中的单词时,Flash Player 会生成一个 MouseEvent 对象。无法阻止的默认行为是:鼠标点击的单词突出显示。

许多类型的事件对象没有关联的默认行为。例如,当建立网络连接时,Flash Player 调度一个连接事件对象,但没有与该对象关联的默认行为。Event 类及其子类的 API 文档列出了每一类型的事件,并说明所有关联的默认行为,以及是否可以阻止该行为。

默认行为仅与由 Flash Player 调度的事件对象关联,但通过 ActionScript 以编程方式调度的事件对象则不存在默认行为。了解这一点很重要。例如,可以使用 EventDispatcher 类的方法来调度类型为 textInput 的事件对象,但该事件对象没有关联的默认行为。也就是说,Flash Player 不会因为您以编程方式调度了 textInput 事件而在 TextField 对象中显示字符。

ActionScript 3.0 中的事件侦听器的新增功能
对于使用过 ActionScript 2.0 addListener() 方法的开发人员来说,指出 ActionScript 2.0 事件侦听器模型和 ActionScript 3.0 事件模型之间的差别可能会有所帮助。下表说明两个事件模型之间的几个主要差别:

要在 ActionScript 2.0 中添加事件侦听器,请在某些情况下使用 addListener(),在其它情况下使用 addEventListener();而在 ActionScript 3.0 中,则始终使用 addEventListener()。
ActionScript 2.0 中没有事件流,这意味着,只能对广播事件的对象调用 addListener() 方法;而在 ActionScript 3.0 中,可以对属于事件流一部分的任何对象调用 addEventListener() 方法。
在 ActionScript 2.0 中,事件侦听器可以是函数、方法或对象,而在 ActionScript 3.0 中,只有函数或方法可以是事件侦听器。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值