• ActionScript3(AS3)类库学习之(五)——EventDispatcher事件分发和监听


    EventDispatcher类是处理Event事件的一个重要的基类,通过继承这个类或者实现IEventDispatcher接口,我们才能实现事件的分发和监听。

    一.自定义消息处理类
    1.通过继承EventDispatcher类来使用该类中消息处理的方法。这个方法最简单


    2.如果我们自定义的类需要继承自别的类,那么我们就需要通过实现IEventDispatcher接口来实现自己的消息处理类,如下例:

    class MyDispatcher implements IEventDispatcher {       
        private var dispatcher:EventDispatcher;
                   
        public function MyDispatcher() {
            dispatcher = new EventDispatcher(this);
        }
               
        public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
            dispatcher.addEventListener(type, listener, useCapture, priority);
        }
               
        public function dispatchEvent(evt:Event):Boolean{
            return dispatcher.dispatchEvent(evt);
        }
        
        public function hasEventListener(type:String):Boolean{
            return dispatcher.hasEventListener(type);
        }
        
        public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void{
            dispatcher.removeEventListener(type, listener, useCapture);
        }
                       
        public function willTrigger(type:String):Boolean {
            return dispatcher.willTrigger(type);
        }
    }



    二.消息的分发和监听
    1.EventDispatcher类使用dispatchEvent()函数来分发消息。


    2.使用addEventListener来增加监听者,需要注意的useCapture的值默认为false,这时只监听Targeting,Bubbling阶段的消息,当它为true时只能监听Capturing阶段的消息,如果想要三个阶段的消息都进行监听,则需要addEventListener两次。


    3.使用addEventListener来增加监听者,对于同一类型,同一阶段,同一目标对象的消息,同一监听函数只能添加一次,多次添加不起作用。


    4.在使用addEventListener增加监听者时,可以用priority参数确定监听函数执行的顺序,值越大,优先级越高。


    5.在不需要监听者时,需要调用removeEventListener()函数来取消监听,否则只要事件存在,AS3就不会自动释放内存,除非将参数useWeakReference设为true。


    6.在调用removeEventListener()函数时,事件的类型和useCapture参数一定要和addEventListener相对应。

    三.判别是否监听者是否存在
    EventDispatcher类有两个函数来判断监听者的存在性。
    1.hasEventListener:判断当前EventDispatcher对象是否存在指定类型的监听器,该监听器需要是注册在当前EventDispatcher对象上,和它的上级对象是否有注册该监听器无关


    2.willTrigger:顾名思义,是指若目标对象是否能触发指定类型的监听器,这时,该监听器注册在当前EventDispatcher对象或是其上级对象上的话都能被触发。



    作者:Jingle Guo
    出处:http://www.cnblogs.com/studynote/
    若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    jQuery语音播放插件
    Oracle(+)号用法
    重写IHttpHandler,实现前后端分离
    JavaScript运算符
    SQL Server 备份和还原
    ReactJS入门
    用Owin Host实现脱离IIS跑Web API单元测试
    Lua
    代码评比结果的反思
    我为什么要在总理来的第二天离开创业大街(转)
  • 原文地址:https://www.cnblogs.com/studynote/p/2994362.html
Copyright © 2020-2023  润新知