AS3 事件管理器 beta

传统的给对象建立监听的方式如下:

1
2
3
4
5
6
stage.addEventListener(MouseEvent.CLICK,saiHello);

function saiHello(e:Event)
{
    trace("hello");
}

但也有例外的时候

在给对象建立监听的时候,有时候对象的监听函数是匿名函数如:
stage.addEventListener(MouseEvent.CLICK,function(){trace(“hello”);});

当监听函数是匿名的时候,我们就无法通过函数名来移除函数了
stage.removeEventListener(“事件”,”函数名(未知)”);

又有一些时候stage对象上有数个监听,且这些监听分散在各处。当我们做监听移除的时候,可能会偶尔的漏掉几个监听没移除。

于是就萌发了写一个 事件管理器 的想法。 下面源码+例子

——事件管理器代码——

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import flash.utils.Dictionary;

var _dir:Dictionary = new Dictionary(true);

function addEvent(obj:Object,key:String,func:Function)
{
    obj.addEventListener(key,func);
    _dir[obj + key] = func;
}

function delEvent(obj:Object,key:String)
{
    for (var _obj:String in _dir)
    {
        if(_obj == obj + key)
        {
            obj.removeEventListener(key,_dir[obj+key]);
            delete _dir[obj+key];
        }
    }
}

function clearEvent(obj:Object)
{
    for (var _obj:String in _dir)
    {
        if (_obj.indexOf(obj.toString))
        {
            var _EventStart:Number = _obj.toString().indexOf("]") + 1;
            var _Event:String = _obj.slice(_EventStart,int.MAX_VALUE);
            obj.removeEventListener(_Event,_dir[_obj]);
            delete _dir[_obj];
        }
    }
}

——事件管理器结束——

BTW:现在2011-11-12 0:05 中国世界杯生死战,伤停补时输给了伊拉克啊 1:0 啊。 国足何时能进入世界杯啊。

回到正题:

addEvent(stage,MouseEvent.MOUSE_DOWN,function(){trace(“hello”);});
addEvent(stage,MouseEvent.MOUSE_UP,function(){trace(“there”);});
输出 hello; there;

addEvent(stage,MouseEvent.MOUSE_DOWN,function(){trace(“hello”);});
addEvent(stage,MouseEvent.MOUSE_UP,function(){trace(“there”);});
delEvent(stage,MouseEvent.MOUSE_DOWN);
输出 there;

addEvent(stage,MouseEvent.MOUSE_DOWN,function(){trace(“hello”);});
addEvent(stage,MouseEvent.MOUSE_UP,function(){trace(“there”);});
clearEvent(stage);
输出 ;

目前事件管理器还是beta阶段,近期将它完成… o(︶︿︶)o 唉 国足看完好伤心,果断去修养。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.