传统的给对象建立监听的方式如下:
[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 唉 国足看完好伤心,果断去修养。