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

📄 eventmanager.class.js

📁 《JavaScript王者归来》examples.rar
💻 JS
字号:
# language: JSVM2

/**
 * @fileoverview js.dom.EventManager class {@link http://jsvm.org/}
 * @file		EventManager.jsc
 * @author	Wan Changhua
 * @version	2.01, 10/23/05
 * @since		JSVM2.0
 */

package js.dom;

import js.lang.BObject;
import js.lang.NotSupportException;
import js.lang.ArgumentException;
import js.lang.System;
import js.util.ArrayList;

/**
 * the js.dom.EventManager instance.
 * Inherit from BObject
 * @author	Wan Changhua
 * @version	2.01, 10/23/05
 * @extends BObject
 * @class This is the EventManager class.  
 * @constructor
 * @param <Object> cs
 * @return an EventManager class
 */

class EventManager extends BObject () {

	/* Don't let anyone instantiate this class 
	 */
	throw new NotSupportException(EventManager.getName()
		+ " cannot be instantiated.");
}

/**
 * @private
 */

var listenerList = new ArrayList();

var registerListener = function(target, type, handler, scope, useCapture) {
	var listener = createEventListenerByHanlder(handler, scope || target);
	listenerList.add({"target" : target, "type" : type
		, "handler" : handler, "scope" : scope
		, "useCapture" : useCapture
		, "listener" : listener});
	return listener;
}

var unregisterListener = function(target, type, handler, scope, useCapture) {
	var i = 0, l = listenerList.size();
	for (; i < l; i++) {
		var o = listenerList.get(i);
		if (o.target == target && o.type == type &&
			o.handler == handler && o.scope == scope
			&& o.useCapture == useCapture) {
			listenerList.remove(o);
			return o.listener;
		}
	}
}

var createEventListenerByHanlder = function(handler, scope) {
	return function (evt) {
		return handler.call(scope, (evt || window.event));
	}
}

System.addVMDestroyListener(function() {
	var o, i = 0, objs = listenerList.toArray();
	while(o = objs[i++]) {
		EventManager.detachEvent(o.target, o.type
			, o.handler, o.scope, o.useCapture);
	}
});


/**
 * Binds the specified function to an event that fires
 * on the object when the function is called.
 *
 * @param   target	event target.
 * @param   type	event type.
 * @param   handler pointer that specifies the function previously set using the attachEvent method.
 * @param   scope	event listener.
 * @param   useCapture	use capture
 * @returns	Returns one of the following possible values:
 *					<code>true</code> The function is bound successfully to the event. 
 *					<code>false</code> The function is not bound to the event. 
 * @type boolean
 */
EventManager.addEventListener = function(target, type, handler, scope, useCapture) {
	try	{
		useCapture = (useCapture == true);
		var fpNotify = registerListener(target, type, handler, scope, useCapture);
		if (target.addEventListener) {
			target.addEventListener(type, fpNotify, useCapture);
		} else if (target.attachEvent) {
			target.attachEvent("on" + type, fpNotify);
			if (useCapture && target.setCapture) {
				target.setCapture();
			}
		}
	} catch (ex) {
		throw new ArgumentException(EventManager.getName()
			+ ".attachEvent() arguments error.", ex);
	}
}

/**
 * Unbinds the specified function from the event, 
 * so that the function stops receiving notifications 
 * when the event fires on the object.
 *
 * @param   target	event target.
 * @param   type	event type.
 * @param   handler pointer that specifies the function previously set using the attachEvent method.
 * @param   scope	event listener.
 * @param   useCapture	use capture
 */
EventManager.removeEventListener = function(target, type, handler, scope, useCapture) {
	try {
		useCapture = (useCapture == true);
		var fpNotify = unregisterListener(target, type, handler, scope, useCapture);
		if (fpNotify == null) {
			return;
		}
		if (target.removeEventListener) {
			target.removeEventListener(type, fpNotify, useCapture);
		} else if (target.detachEvent) {
			target.detachEvent("on" + type, fpNotify);
			if (useCapture && target.releaseCapture) {
				target.releaseCapture();
			}
		}
	} catch (ex) {
		throw new ArgumentException(EventManager.getName()
			+ ".detachEvent() arguments error.", ex);
	}
}

/*
 * @see #addEventListener
 * @see #removeEventListener
 * @Deprecated
 */ 
EventManager.attachEvent = EventManager.addEventListener;
EventManager.detachEvent = EventManager.removeEventListener;

⌨️ 快捷键说明

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