* @function\r
* @return {number} ミリ秒\r
*/\r
- X_Timer_now = Date.now || function(){ return +new Date; },\r
+ X_Timer_now = Date.now || ( function(){ return +new Date; } ),\r
\r
X_Timer_SET_TIMEOUT = window.setTimeout,\r
X_Timer_CLEAR_TIMEOUT = window.clearTimeout,\r
\r
X_Timer_REQ_FRAME_LIST = [],\r
X_Timer_requestID = 0,\r
- X_Timer_busyOnFrame = false;\r
+ X_Timer_busyOnFrame = false,\r
+\r
+ /**\r
+ * requestAnimationFrame をセットします。\r
+ * @alias X.Timer.requestFrame\r
+ * @function\r
+ * @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
+ * @param {*} args2\r
+ * @param {*} args3\r
+ * @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
+ */\r
+ X_Timer_requestFrame = X_Timer_REQ_ANIME_FRAME ?\r
+ (function( args1, args2, args3 ){\r
+ var i = X_Timer_REQ_FRAME_LIST.length,\r
+ f;\r
+ i === 0 && ( X_Timer_requestID = X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) );\r
+ f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
+ return f.uid = ++X_Timer_uid;\r
+ }) :\r
+ (function( args1, args2, args3 ){\r
+ var i = X_Timer_REQ_FRAME_LIST.length,\r
+ f;\r
+ i === 0 && ( X_Timer_requestID = X_Timer_add( 0, 1, X_Timer_onEnterFrame ) );\r
+ f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
+ return f.uid = ++X_Timer_uid;\r
+ }),\r
+\r
+ /**\r
+ * requestAnimationFrame を解除します。登録時に受け取ったタイマーIDを使用します。\r
+ * @alias X.Timer.cancelFrame\r
+ * @function\r
+ * @param {number} タイマーID\r
+ */\r
+ X_Timer_cancelFrame = X_Timer_CANCEL_ANIME_FRAME ?\r
+ (function( uid ){\r
+ var list = X_Timer_REQ_FRAME_LIST,\r
+ l = list.length,\r
+ i = l,\r
+ f;\r
+ // fire 中の cancel\r
+ if( X_Timer_busyOnFrame ){\r
+ if( !X_Timer_removal ) X_Timer_removal = {};\r
+ X_Timer_removal[ uid ] = true;\r
+ } else {\r
+ for( ; i; ){\r
+ if( ( f = list[ --i ] ).uid < uid ) break;\r
+ if( f.uid === uid ){\r
+ list.splice( i, 1 );\r
+ // gecko では無い場合がある\r
+ l === 1 && X_Timer_CANCEL_ANIME_FRAME && X_Timer_CANCEL_ANIME_FRAME( X_Timer_requestID );\r
+ break;\r
+ };\r
+ }; \r
+ };\r
+ }) :\r
+ (function( uid ){\r
+ var list = X_Timer_REQ_FRAME_LIST,\r
+ l = list.length,\r
+ i = l,\r
+ f;\r
+ // fire 中の cancel\r
+ if( X_Timer_busyOnFrame ){\r
+ if( !X_Timer_removal ) X_Timer_removal = {};\r
+ X_Timer_removal[ uid ] = true;\r
+ } else {\r
+ for( ; i; ){\r
+ if( ( f = list[ --i ] ).uid < uid ) break;\r
+ if( f.uid === uid ){\r
+ list.splice( i, 1 );\r
+ l === 1 && X_Timer_remove( X_Timer_requestID );\r
+ break;\r
+ };\r
+ };\r
+ };\r
+ });\r
+\r
\r
// ------------------------------------------------------------------------- //\r
// --- interface ----------------------------------------------------------- //\r
* <p>setTimeout のコールバックに文字列しか指定できないブラウザがあり対策しています。\r
* <p>requestAnimationFrame をラップします。ベンダープレフィックス付の requestAnimationFrame もない場合、setTimeout にフォールバックします。\r
* \r
- * @example X.Timer.add( 1000, 5, thisContext, onTimer );\r
- * \r
* @namespace X.Timer\r
* @alias X.Timer\r
*/ \r
-X.Timer = {\r
+X[ 'Timer' ] = {\r
\r
- now : X_Timer_now,\r
+ 'now' : X_Timer_now,\r
+ \r
+ 'add' : X_Timer_add,\r
\r
+ 'once' : X_Timer_once,\r
+ \r
+ 'remove' : X_Timer_remove,\r
+ \r
+ 'requestFrame' : X_Timer_requestFrame,\r
+ \r
+ 'cancelFrame' : X_Timer_cancelFrame\r
+ \r
+};\r
+\r
+// ------------------------------------------------------------------------- //\r
+// --- implements ---------------------------------------------------------- //\r
+// ------------------------------------------------------------------------- //\r
+\r
/**\r
* タイマーをセットします。\r
+ * @alias X.Timer.add\r
* @param {number} time ミリ秒\r
* @param {number} opt_count 回数。省略可能。指定回数で自動でタイマーを破棄します。0 を指定した場合無限にタイマーが呼ばれます。省略した場合 0 と同じです。\r
* @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
* @param {*} args2\r
* @param {*} args3\r
* @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
+ * @example X.Timer.add( 1000, 5, thisContext, onTimer );\r
*/\r
- add : function( time, opt_count, args1, args2, args3 ){\r
+ function X_Timer_add( time, opt_count, args1, args2, args3 ){\r
var list = X_Timer_TICKET_LIST,\r
hash, obj;\r
time = time < X_Timer_INTERVAL_TIME ? 1 : time / X_Timer_INTERVAL_TIME | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
hash = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
if( !hash ) return -1; // dev only\r
\r
- if( !hash.k ) hash = { f : hash };\r
+ if( !hash.kind ) hash = { func : hash };\r
hash.time = time;\r
hash.last = time;\r
hash.count = opt_count;\r
\r
!X_Timer_busyTimeout && X_Timer_update();\r
return X_Timer_uid;\r
- },\r
+ };\r
\r
/**\r
* 1 回呼ばれたら解除されるタイマーをセットします。\r
+ * @alias X.Timer.once\r
* @param {number} time ミリ秒\r
* @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
* @param {*} args2\r
* @param {*} args3\r
* @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
*/\r
- once : function( time, args1, args2, args3 ){\r
- return X.Timer.add( time, 1, args1, args2, args3 );\r
- },\r
+ function X_Timer_once( time, args1, args2, args3 ){\r
+ return X_Timer_add( time, 1, args1, args2, args3 );\r
+ };\r
\r
/**\r
* タイマーを解除します。登録時に受け取ったタイマーIDを使用します。\r
+ * @alias X.Timer.remove\r
* @param {number} タイマーID\r
*/\r
- remove : function( uid ){\r
+ function X_Timer_remove( uid ){\r
var list = X_Timer_TICKET_LIST,\r
i = list.length,\r
l = i,\r
break;\r
};\r
}; \r
- !lazy && eventDispatcher.kill();\r
+ !lazy && eventDispatcher[ 'kill' ]();\r
}; */\r
};\r
\r
};\r
}; \r
};\r
- },\r
- \r
- /**\r
- * requestAnimationFrame をセットします。\r
- * @function\r
- * @param {*} args1 コールバックのための最大で 3 つの引数を指定します。参考:__CallbackHash__\r
- * @param {*} args2\r
- * @param {*} args3\r
- * @return {number} タイマーID。1 以上の数値。タイマーの解除に使用。\r
- */\r
- requestFrame : X_Timer_REQ_ANIME_FRAME ?\r
- (function( args1, args2, args3 ){\r
- var i = X_Timer_REQ_FRAME_LIST.length,\r
- f;\r
- i === 0 && ( X_Timer_requestID = X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) );\r
- f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
- return f.uid = ++X_Timer_uid;\r
- }) :\r
- (function( args1, args2, args3 ){\r
- var i = X_Timer_REQ_FRAME_LIST.length,\r
- f;\r
- i === 0 && ( X_Timer_requestID = X.Timer.add( 0, 1, X_Timer_onEnterFrame ) );\r
- f = X_Timer_REQ_FRAME_LIST[ i ] = X_Callback_classifyCallbackArgs( args1, args2, args3 );\r
- return f.uid = ++X_Timer_uid;\r
- }),\r
-\r
- /**\r
- * requestAnimationFrame を解除します。登録時に受け取ったタイマーIDを使用します。\r
- * @function\r
- * @param {number} タイマーID\r
- */\r
- cancelFrame : X_Timer_CANCEL_ANIME_FRAME ?\r
- (function( uid ){\r
- var list = X_Timer_REQ_FRAME_LIST,\r
- l = list.length,\r
- i = l,\r
- f;\r
- // fire 中の cancel\r
- if( X_Timer_busyOnFrame ){\r
- if( !X_Timer_removal ) X_Timer_removal = {};\r
- X_Timer_removal[ uid ] = true;\r
- } else {\r
- for( ; i; ){\r
- if( ( f = list[ --i ] ).uid < uid ) break;\r
- if( f.uid === uid ){\r
- list.splice( i, 1 );\r
- // gecko では無い場合がある\r
- l === 1 && X_Timer_CANCEL_ANIME_FRAME && X_Timer_CANCEL_ANIME_FRAME( X_Timer_requestID );\r
- break;\r
- };\r
- }; \r
- };\r
- }) :\r
- (function( uid ){\r
- var list = X_Timer_REQ_FRAME_LIST,\r
- l = list.length,\r
- i = l,\r
- f;\r
- // fire 中の cancel\r
- if( X_Timer_busyOnFrame ){\r
- if( !X_Timer_removal ) X_Timer_removal = {};\r
- X_Timer_removal[ uid ] = true;\r
- } else {\r
- for( ; i; ){\r
- if( ( f = list[ --i ] ).uid < uid ) break;\r
- if( f.uid === uid ){\r
- list.splice( i, 1 );\r
- l === 1 && X.Timer.remove( X_Timer_requestID );\r
- break;\r
- };\r
- };\r
- };\r
- })\r
- \r
-};\r
-\r
-// ------------------------------------------------------------------------- //\r
-// --- implements ---------------------------------------------------------- //\r
-// ------------------------------------------------------------------------- //\r
+ };\r
\r
if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){\r
X.Timer[ '_' ] = X_Timer_onTimeout;\r
\r
X_Timer_currentUID = q.uid;\r
\r
- if( q.k ){\r
+ if( q.kind ){\r
r = X_Callback_proxyCallback( q, [] );\r
} else {\r
- r = q.f();\r
+ r = q.func();\r
};\r
\r
//console.log( 'fire....' );\r
X_Timer_skipUpdate = true;\r
for( uid in X_Timer_removal ){\r
//if( X_EMPTY_OBJECT[ uid ] ) continue;\r
- X.Timer.remove( uid );\r
+ X_Timer_remove( uid );\r
};\r
X_Timer_skipUpdate = false;\r
X_Timer_removal = null;\r
\r
list.splice( 0, l );\r
if( list.length ){\r
- X_Timer_requestID = X_Timer_REQ_ANIME_FRAME ? X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) : X.Timer.add( 0, 1, X_Timer_onEnterFrame );\r
+ X_Timer_requestID = X_Timer_REQ_ANIME_FRAME ? X_Timer_REQ_ANIME_FRAME( X_Timer_onEnterFrame ) : X_Timer_add( 0, 1, X_Timer_onEnterFrame );\r
};\r
\r
X_Timer_busyOnFrame = false;\r
if( X_Timer_removal ){\r
for( uid in X_Timer_removal ){\r
//if( X_EMPTY_OBJECT[ uid ] ) continue;\r
- X.Timer.cancelFrame( X_Timer_removal[ uid ] );\r
+ X_Timer_cancelFrame( X_Timer_removal[ uid ] );\r
};\r
X_Timer_removal = null;\r
};\r