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

📄 eventmanager.jsc

📁 《JavaScript王者归来》examples.rar
💻 JSC
字号:
# 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.System;
import js.lang.BObject;
import js.lang.NotSupportException;
import js.lang.ArgumentException;
import js.util.HashMap;

/** * 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 registerMap = new HashMap();

var getEventListenerByHanlder = function (fHandle, oScope)
{
	return registerMap.remove(fHandle);
}
var createEventListenerByHanlder = function (fHandle, oScope)
{
		var fpNotify = function (evt)
		{
			return fHandle.call(oScope, (evt || window.event));
		}
		registerMap.put(fHandle, fpNotify);
		return fpNotify;
}


/**
 * Binds the specified function to an event that fires
 * on the object when the function is called.
 * * @param   oTarget	event target.
 * @param   sType	event type.
 * @param   fHandle pointer that specifies the function previously set using the attachEvent method. * @param   oScope	event listener.
 * @param   bUseCapture	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.attachEvent = function (oTarget, sType, fHandle, oScope, bUseCapture)
{
	try
	{
		var fpNotify = createEventListenerByHanlder(fHandle, oScope);
		var useCapture = (bUseCapture == true);
		if (oTarget.addEventListener)
		{
			oTarget.addEventListener(sType, fpNotify, useCapture);
		}
		else if (oTarget.attachEvent)
		{
			oTarget.attachEvent("on" + sType, fpNotify);
			if (useCapture &&	oTarget.setCapture)
			{
				oTarget.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   oTarget	event target.
 * @param   sType	event type.
 * @param   fHandle pointer that specifies the function previously set using the attachEvent method. * @param   oScope	event listener.
 * @param   bUseCapture	use capture */
EventManager.detachEvent = function (oTarget, sType, fHandle, oScope, bUseCapture)
{
	try
	{
		var fpNotify = getEventListenerByHanlder(fHandle, oScope);
		if (fpNotify == null)
		{
			return;
		}
		var useCapture = (bUseCapture == true);
		if (oTarget.removeEventListener)
		{
			oTarget.removeEventListener(sType, fpNotify, useCapture);
		}
		else if (oTarget.detachEvent)
		{
			oTarget.detachEvent("on" + sType, fpNotify);
			if (useCapture &&	oTarget.releaseCapture)
			{
				oTarget.releaseCapture();
			}
		}
		registerMap.remove(fHandle);
	}
	catch (ex)
	{
		throw new ArgumentException(EventManager.getName()
			+ ".detachEvent() arguments error.", ex);
	}
}

⌨️ 快捷键说明

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