AS3 事件管理器 beta

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

[cc]
stage.addEventListener(MouseEvent.CLICK,saiHello);

function saiHello(e:Event)
{
trace(“hello”);
}
[/cc]
但也有例外的时候

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

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

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

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

——事件管理器代码——
[cc lang=”actionscript3″ nowrap=”false”]
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];
}
}
}
[/cc]
——事件管理器结束——

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 唉 国足看完好伤心,果断去修养。

发表评论

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