three.js 源碼注釋(二十一)Core/EventDispatcher.js,eventdispatcher
商域無疆 (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