⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cfeventdispatcher.as

📁 flash强大事件机制扩展类
💻 AS
字号:
//----------------------------------------
/*
@Description:  	提供广播事件和侦听器管理功能.原类:mx.events.EventDispatcher
@usage:   		
@example: 
//
import AS2.events.CFEventDispatcher;
1:继承
class yourClassName extends CFEventDispatcher
{
	...
	this.dispatchEvent(事件对象);
	...
}
//
2:不继承
class yourClassName
{
	public var addEventListener:Function;
	public var removeEventListener:Function;
	public var dispatchEvent:Function;
	public function yourClassName()
	{
		CFEventDispatcher.initialize(this);
	}
	...
	this.dispatchEvent(事件对象);
	...
}
//
@author:  ChooseFlash 修改
@date:	  2007-07-07
*/
//----------------------------------------
class AS2.events.CFEventDispatcher
{
	//----------------------------------------
	public function CFEventDispatcher(){}
	//----------------------------------------
	private static var _ed:CFEventDispatcher;
	//----------------------------------------
	private static function _removeEventListener(queue:Object, handler):Void
	{
		if (queue != undefined) {
			var l:Number = queue.length;
			while(l--){
				if(queue[l] == handler){
					queue.splice(l, 1);
					return;
				}
			}
		}
	}
	public static function initialize(o:Object):Void
	{
		if (_ed == undefined) {
			_ed = new CFEventDispatcher();
		}
		o.addEventListener = _ed.addEventListener;
		o.removeEventListener = _ed.removeEventListener;
		o.dispatchEvent = _ed.dispatchEvent;
		o.dispatchQueue = _ed.dispatchQueue;
	}
	//----------------------------------------
	private function dispatchQueue(queueObj:Object, eventObj:Object):Void
	{
		if (queueObj[eventObj.type] != undefined) {
			for (var i:String in queueObj[eventObj.type]) {
				var o = queueObj[eventObj.type][i];
				if (typeof (o) == "object" || typeof (o) == "movieclip") {
					//调用对象中的handleEvent函数.
					//if (o.handleEvent != undefined) {
						//o.handleEvent(eventObj);
					//}
					//调用对象中的事件同名函数.  
					//if (o[eventObj.type] != undefined) {
						o[eventObj.type](eventObj);
					//}
				} else {
					//调用自定义函数.
					o.apply(queueObj, [eventObj]);
				}
			}
		}
	}
	public function dispatchEvent(eventObj:Object):Void
	{
		//将事件源始终指向this(应用此类的对象).
		eventObj.target = this;
		//此句对动态类,或在类中定义"事件名Handler" 这样的函数时才有效.
		/*
		用法: 对象.事件名Handler = function(evt:Object){};
		*/
		//this[eventObj.type + "Handler"](eventObj);
		this.dispatchQueue(this, eventObj);
	}
	public function addEventListener(event:String, handler):Void
	{
		if (this[event] == undefined) {
			this[event] = [];
		}
		//ASSetPropFlags是隐藏的方法.
		//_global.ASSetPropFlags(this, event, 1);
		CFEventDispatcher._removeEventListener(this[event], handler);
		this[event].push(handler);
	}
	public function removeEventListener(event:String, handler):Void
	{
		CFEventDispatcher._removeEventListener(this[event], handler);
	}
	//----------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -