three.js 源码注释(二十一)Core/EventDispatcher.js

商域无疆 (http://blog.csdn.net/omni360/)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、Html5、WEBGL、THREE.JS否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


俺也是刚开始学,好多地儿肯定不对还请见谅.

以下代码是THREE.JS 源码文件中Core/EventDispatcher.js文件的注释.

更多更新在 : https://github.com/omni360/three.js.sourcecode


/**
 * https://github.com/mrdoob/eventdispatcher.js/
 */
/*
///EventDispatcher可调度事件的所有运行时类的基类.用来管理侦听函数,被嵌入Object3D对象之上.当Object3D发生事件时,这个方法就会自动被触发.
///可以通过调用调度该事件的对象的 addEventListener() 方法来注册函数以处理运行时事件。
*/
///<summary>EventDispatcher</summary>
THREE.EventDispatcher = function () {}

/****************************************
****下面是Vector4对象提供的功能函数.
****************************************/

THREE.EventDispatcher.prototype = {

	constructor: THREE.EventDispatcher,	//构造器,返回对创建此对象EventDispatcher函数的引用.

	/*
	///apply方法将当前基类绑定到参数Object对象之上,将基类的方法添加到object对象内.
	*/
	///<summary>apply</summary>
	///<param name ="object" type="Object">绑定事件分发功能的对象</param>
	apply: function ( object ) {

		object.addEventListener = THREE.EventDispatcher.prototype.addEventListener;		//为object添加addEventListener()方法.
		object.hasEventListener = THREE.EventDispatcher.prototype.hasEventListener;		//为object添加hasEventListener()方法.
		object.removeEventListener = THREE.EventDispatcher.prototype.removeEventListener;		//为object添加removeEventListener()方法.
		object.dispatchEvent = THREE.EventDispatcher.prototype.dispatchEvent;		//为object添加dispatchEvent()方法.

	},

	/*
	///addEventListener方法使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知
	///AIR 运行时中的 JavaScript 代码使用此方法注册 AIR API 定义的事件的事件侦听器。对于其它 JavaScript 事件(如 DOM body 对象的 onload 事件),
	///您可以像对浏览器中运行的内容一样使用标准事件处理技术。成功注册一个事件侦听器后,无法通过额外调用 addEventListener() 来更改其优先级。 
	///要更改侦听器的优先级,必须首先调用 removeListener()。然后,可以使用新的优先级再次注册该侦听器。 
	/// NOTE:如果不再需要某个事件侦听器,可调用 removeEventListener() 删除它,否则会产生内存问题。由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。
	/// NOTE:复制 EventDispatcher 实例时并不复制其中附加的事件侦听器。(如果新近创建的节点需要一个事件侦听器,必须在创建该节点后附加该侦听器。) 但是,如果移动 EventDispatcher 实例,则其中附加的事件侦听器也会随之移动。
	*/
	///<summary>addEventListener</summary>
	///<param name ="type" type="String">事件的类型</param>
	///<param name ="listener" type="Function">处理事件的侦听器函数。 此函数必须接受 Event 对象作为其唯一的参数并且不能返回任何结果,函数可以有任何名称</param>
	addEventListener: function ( type, listener ) {

		if ( this._listeners === undefined ) this._listeners = {};

		var listeners = this._listeners;

		if ( listeners[ type ] === undefined ) {

			listeners[ type ] = [];

		}

		if ( listeners[ type ].indexOf( listener ) === - 1 ) {

			listeners[ type ].push( listener );	

		}

	},

	/*
	///addEventListener方法	检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。这样,您就可以确定 EventDispatcher 对象在事件流层次结构中的哪个位置改变了对事件类型的处理。
	*/
	///<summary>addEventListener</summary>
	///<param name ="type" type="String">事件的类型</param>
	///<param name ="listener" type="Function">要检查的侦听器对象</param>
	///<returns type="bool">返回true or false</returns>
	hasEventListener: function ( type, listener ) {

		if ( this._listeners === undefined ) return false;

		var listeners = this._listeners;

		if ( listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1 ) {

			return true;	//如果指定类型的侦听器已注册,则值为 true;

		}

		return false;	//否则,值为 false。 

	},

	/*
	///removeEventListener方法从 EventDispatcher 对象中删除侦听器。如果没有向 EventDispatcher 对象注册任何匹配的侦听器,则对此方法的调用没有任何效果。 
	*/
	///<summary>removeEventListener</summary>
	///<param name ="type" type="String">事件的类型</param>
	///<param name ="listener" type="Function">要删除的侦听器对象</param>
	removeEventListener: function ( type, listener ) {

		if ( this._listeners === undefined ) return;

		var listeners = this._listeners;
		var listenerArray = listeners[ type ];

		if ( listenerArray !== undefined ) {

			var index = listenerArray.indexOf( listener );

			if ( index !== - 1 ) {

				listenerArray.splice( index, 1 );	//删除的侦听器对象

			}

		}

	},

	/*
	///dispatchEvent方法将事件调度到事件流中。事件目标是对其调用 dispatchEvent() 方法的 EventDispatcher 对象。 
	*/
	///<summary>dispatchEvent</summary>
	///<param name ="event" type="Event">调度到事件流中的 Event 对象。如果正在重新调度事件,则会自动创建此事件的一个克隆。  在调度了事件后,其 target 属性将无法更改,因此您必须创建此事件的一个新副本以能够重新调度。 </param>
	dispatchEvent: function ( event ) {

		if ( this._listeners === undefined ) return;

		var listeners = this._listeners;
		var listenerArray = listeners[ event.type ];

		if ( listenerArray !== undefined ) {

			event.target = this;

			var array = [];
			var length = listenerArray.length;

			for ( var i = 0; i < length; i ++ ) {

				array[ i ] = listenerArray[ i ];

			}

			for ( var i = 0; i < length; i ++ ) {

				array[ i ].call( this, event );

			}

		}

	}

};


商域无疆 (http://blog.csdn.net/omni360/)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、Html5、WEBGL、THREE.JS否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


以下代码是THREE.JS 源码文件中Core/EventDispatcher.js文件的注释.

更多更新在 : https://github.com/omni360/three.js.sourcecode

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。