dispatchEvent()

本文介绍Adobe Flash ActionScript 3.0 (AS3) 中dispatchEvent()方法的使用方法,包括如何自定义事件、如何发送事件及如何监听事件。并提供了一个具体的示例,展示如何通过自定义事件改变对象的透明度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用 dispatchEvent() 方法

在组件 ActionScript 类文件的正文中,您可以使用 dispatchEvent() 方法来广播事件。dispatchEvent() 方法的语法如下:

dispatchEvent(eventObj)

eventObj 参数是一个描述事件的 ActionScript 对象
在调用 dispatchEvent() 方法之前,必须在代码中对其进行声明,如下所示:

private var dispatchEvent:Function;

此外,还必须创建一个事件对象以传递给 dispatchEvent()。该事件对象包含侦听器可用来处理该事件的有关信息。

在发送事件之前可以显式地构建一个事件对象,如下面示例所示:

var eventObj = new Object();

eventObj.type = "myEvent";

eventObj.target = this;

dispatchEvent(eventObj);

您也可以使用快捷语法在一行代码中设置 type 属性和 target 属性的值,并发送事件:

ancestorSlide.dispatchEvent({type:"revealChild", target:this});

在上面的示例中,由于 target 属性是隐式的,因此,设置该属性是可选操作。

Flash 8 文档中对每个事件的说明列出了可选和必需的事件属性。例如,ScrollBar.scroll 事件除了使用 type target 属性外,还使用 detail 属性。有关详细信息,请参阅"组件语言参考"中的事件说明。

公共事件

下表列出了由各种类广播的公共事件。如果事件适用于组件,每个组件都应广播这些事件。这里没有列出所有组件的全部事件,只列出了可能会由其它组件重新使用的事件。虽然某些事件未指定任何参数,但所有事件都有隐式参数:对广播事件的对象的引用。

事件

使用

click

Button 组件使用,或在鼠标单击没有其它含义时使用。

change

ListComboBox 和其它文本输入组件使用。

scroll

ScrollBar 和其它导致滚动(在滚动弹出菜单上滚动"缓冲器")的控件使用。

此外,由于是从基类继承而来,所有组件都广播以下事件:

UIComponent 事件

说明

load

组件正在创建或加载其子对象。

unload

组件正在卸载其子对象。

focusIn

组件现在有输入焦点。某些 HTML 等效组件(ListBoxComboBoxButtonText)还可以广播 focus,但所有组件都广播 DOMFocusIn

focusOut

组件已失去输入焦点。

move

组件已被移至新位置。

resize

组件大小已更改。

下表对一些常见的键事件进行说明:

键事件

说明

keyDown

按下某个键。code 属性包含被按下键的键控代码,ascii 属性包含它的 ASCII 代码。不要使用低级 Key 对象检查,因为 Key 对象可能尚未生成该事件。

keyUp

释放某个键。

 

as3.0 dispatchEvent()的用法

 

關於dispatchEvent()的用法困擾了我很長一段事間,總是摸不著它的用法。dispatchEvent用來自定一發送事件。今天特意在網上搜索了一些,把一些好的東西分享給大家。

關於自定義發送事件的3種方式大家可參照黑羽的博客http://www.kingda.org/archives/kingda/2006/08/as3095.html把他的教程讀讀,或許會有些明了。下面這些內容是摘自網絡上的一篇文章:

Evevt和EventDispatcher类在as3的事件机制中是很重要的角色,dispatchEvent()是EventDispatcher类 的一个事件发送方法,它可以发送出Event类或其子类的实例,在as3中所有的显示对象都可以发送事件,因为as3中所有的显示对象都是 EventDispatcher子类DisplayObject的实例。

       发送事件有三种方式:继承EventDispatcher,如sprite等显示对象、复合EventDispatcher或其子类、实现IEventDispatcher接口。

       个人认为复合EventDispatcher在实际应用中用的比较多,没有找到合适例子,自己写了一个很简单的,仅供参考,为了演示把简单的问题复杂话了,首先画一个矩形,点击矩形后发送一个事件,矩形接收事件后alpha变为0;

自定义事件:

package{
       import flash.events.Event;

       public class MyEvent extends Event{
             public static const ALPHA:String = "alpha";
                public function MyEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
                 super(type, bubbles, cancelable);
                }
          }
}

 

package{
import flash.display.Sprite;

public class Sample extends Sprite{
       public function Sample(){
              this.graphics.beginFill(0xff6600);
              this.graphics.drawRect(50,50,100,50);
              this.graphics.endFill();
              this.addEventListener(MyEvent.ALPHA,blackHandler);
        }
        private function blackHandler(evt:MyEvent){
              this.alpha = 0;
        }
   }
}

主类:

package{
        import flash.display.Sprite;
        import flash.events.MouseEvent;

        public class Main extends Sprite{
               private var sample:Sample;
               public function Main(){
                sample = new Sample();

                //注册事件侦听器
                sample.addEventListener(MouseEvent.CLICK,clickHandler);
                addChild(sample);
         }
         private function clickHandler(evt:MouseEvent){

               //发送事件
                sample.dispatchEvent(new MyEvent(MyEvent.ALPHA));
         }
      }
}

注:在as3中只有事件的发送者才能侦听事件。在Main类中sample实例发送的事件也只有sample注册的侦听器才能侦听,在Sample中的this正是指向了sample。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值