[AS3]事件处理

  • 事件对象类型

 

事件对象类型的基类是Event,所有的事件均派生自Event,并且在其派生的事件中,必须调用基类的构造函数,因为系统要自动将一些基本的信息填充到这个对象中,如targetcurrentTarget等,而假如不调用基类的构造函数,则这些信息则无法填充到这个事件对象中,会报错。所以必须在构造函数中调用基类的构造函数:super(type,bubbles,cancelable)。为了增强自定义事件的通用性,同时最好重写toStringclone两个函数。

同时,自定义事件只是一种事件的模型,一般用它来传递相关的数据,而具体这个事件是哪个事件,即这个事件的对象怎么被识别出来,则是靠type来决定,type实际上只是个字符串,因而对于需要用的具体的事件种类,可以定义一个静态的类来存放这些字符串常量,然后再用这些字符串常量来初始化我们自定义好的事件类。

事件里的两个重要的成员:targetcurrentTarget

target如果不在显示列表中,则表示事件发生的对象,也即注册了此事件监听器的对象,此时target的值总是等于currentTarget。如果target在显示列表中,则必须考虑显示列表的层级结构,比如在舞台上单击某点,target表示距离舞台最深的当前鼠标点击处的对象。currentTarget则表示了当前正在处理事件的对象,它满足两个条件:1.注册了此事件的监听器 2.正在处理事件,假如给显示列表的许多对象添加相同的事件监听器,则可以使用currentTarget属性来判断当前的事件处理对象属于哪个。

  • 事件派发

事件的派发也就是事件在什么时候触发,要通过使用监听器来处理事件的发生,前提的条件当然是事件会发生。事件被触发后,则系统会自动搜索监听器列表,查找到给此类型事件上的监听器函数并调用它。事件的派发在某段代码中:var event1:MyEvent=new MyEvent();this.dispatchEvent(event1);

AS以一个对象为目标调度一个事件的时候,如果这个目标对象处在显示列表中,则其显示层次的所有祖先都可以接收到此事件的通知,如果其祖先对此事件注册了useCapture为真的A监听器,则只在此事件的捕获阶段响应此事件,即其祖先只在以子对象为目标的事件发生并向上搜寻到顶级祖先对象的过程中会响应A监听器,默认useCaputurefalse,即在目标阶段和冒泡阶段响应事件。而与目标对象的祖先同级的非祖先对象则不会被通知。例如舞台上有PA1PA2两个MC对象,均添加了”EVENT_TEST”事件的监听器,在PA1对象里有个SON1MC对象,它在鼠标点击监听器函数里派发”EVENT_TEST”事件,此时只有PA1会收到通知,而PA2不会。

如果事件调度的目标不在显示列表中,比如是自己定义的一个C类,在类里面有指定事件E的派发,然后就可以给一个C类的实例添加事件E的监听器。在一个类的内部定义了指定事件的派发,则这个类的所有实例都能在此指定事件发生时的通知。

  • 事件监听器

 

一个对象要响应某件事件时,需要对此类型的某一特定事件添加监听器,此类型的某一特定事件其实就是定义在事件类内的字符串常量,即type。事件监听器以为事件对象为唯一参数,返回为void

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值