5 X.Timer = ( function(){
\r
6 var setTimeout = window.setTimeout;
\r
7 var clearTimeout = window.clearTimeout;
\r
8 var INTERVAL_TIME = 16;
\r
9 var TICKET_LIST = [];
\r
25 queue = list[ --i ];
\r
26 if( 0 < ( queue[ INDEX_LAST ] -= c ) ) continue;
\r
27 f = queue[ INDEX_CALLBACK ];
\r
28 c = queue[ INDEX_COUNT ];
\r
30 if( ret === false || ret & X.Callback.UN_LISTEN || c === 1 ){
\r
31 list.splice( i, 1 );
\r
36 if( 1 < c ) --queue[ INDEX_COUNT ];
\r
37 queue[ INDEX_LAST ] = queue[ INDEX_TIME ];
\r
43 var list = TICKET_LIST,
\r
48 timerId !== -1 && clearTimeout( timerId );
\r
53 last = list[ --i ][ INDEX_LAST ];
\r
54 if( last < n ) n = last;
\r
56 if( n < next || timerId === -1 ){
\r
57 timerId !== -1 && clearTimeout( timerId );
\r
58 timerId = setTimeout( loop, INTERVAL_TIME * n );
\r
64 add : function( time, opt_count, args1, args2, args3 ){
\r
65 time = time < INTERVAL_TIME ? 1 : ( time / INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;
\r
67 if( typeof opt_count !== 'number' ){
\r
74 TICKET_LIST[ TICKET_LIST.length ] = [ time, time, opt_count, X.Callback.create( args1, args2, args3 ) ];
\r
77 once : function( time, args1, args2, args3 ){
\r
78 X.Timer.add( time, 1, args1, args2, args3 );
\r
80 remove : function( args1, args2 ){
\r
84 if( !callback ) return;
\r
85 while( queue = list[ i ] ){
\r
86 if( queue[ INDEX_CALLBACK ].same( args1, args2 ) === true ){
\r
88 list.splice( i, 1 );
\r