标签:javascript three.js web3d webgl 源码
商域无疆 (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
three.js 源码注释(二十一)Core/EventDispatcher.js
标签:javascript three.js web3d webgl 源码
原文地址:http://blog.csdn.net/omni360/article/details/41443417