5 X.Timer = ( function(){
\r
6 var setTimeout = window.setTimeout,
\r
7 clearTimeout = window.clearTimeout,
\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 & 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[ --l ][ INDEX_LAST ] ) < n && ( n = last );
\r
55 if( n < next || timerId === -1 ){
\r
56 timerId !== -1 && clearTimeout( timerId );
\r
57 timerId = setTimeout( loop, INTERVAL_TIME * n );
\r
63 window.requestAnimationFrame ||
\r
64 window.webkitRequestAnimationFrame ||
\r
65 window.mozRequestAnimationFrame ||
\r
66 window.oRequestAnimationFrame ||
\r
67 window.msRequestAnimationFrame ||
\r
70 window.cancelRequestAnimationFrame ||
\r
71 window.webkitCancelAnimationFrame ||
\r
72 window.webkitCancelRequestAnimationFrame ||
\r
73 window.mozCancelRequestAnimationFrame ||
\r
74 window.oCancelRequestAnimationFrame ||
\r
75 window.msCancelRequestAnimationFrame ||
\r
77 REQUEST_FRAME_LIST = [],
\r
80 function onEnterFrame( time ){
\r
81 var list = REQUEST_FRAME_LIST,
\r
84 time = time || ( Date.now ? Date.now() : +new Date );
\r
86 ( f = list[ --i ] )( time );
\r
94 add : function( time, opt_count, args1, args2, args3 ){
\r
95 time = time < INTERVAL_TIME ? 1 : ( time / INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;
\r
97 if( typeof opt_count !== 'number' ){
\r
104 TICKET_LIST[ TICKET_LIST.length ] = [ time, time, opt_count, X.Callback.create( args1, args2, args3 ), ++uid ];
\r
108 once : function( time, args1, args2, args3 ){
\r
109 X.Timer.add( time, 1, args1, args2, args3 );
\r
111 remove : function( uid ){
\r
113 list = TICKET_LIST,
\r
118 if( ( queue = list[ --i ] )[ INDEX_UID ] === uid ){
\r
119 list.splice( i, 1 );
\r
120 f = queue[ INDEX_CALLBACK ];
\r
121 f.kill && f.kill();
\r
122 ( /* queue[ INDEX_COUNT ] <= next || */ l === 1 ) && update();
\r
129 // string only ie4-
\r
130 ,_loop : X.UA.IE && X.UA.IE < 5 && (function(){
\r
132 loop = 'X.Timer._loop()';
\r
136 ,requestFrame : function( args1, args2, args3 ){
\r
137 var i = REQUEST_FRAME_LIST.length,
\r
139 i === 0 && ( requestID = ( enterFrame ? enterFrame( onEnterFrame ) : X.Timer.add( 16, 1, onEnterFrame ) ) );
\r
140 f = REQUEST_FRAME_LIST[ i ] = X.Callback.create( args1, args2, args3 );
\r
141 return f.uid = ++uid;
\r
143 cancelFrame : function( uid ){
\r
144 var list = REQUEST_FRAME_LIST,
\r
149 if( ( f = list[ --i ] ).uid < uid ) break;
\r
150 if( f.uid === uid ){
\r
151 list.splice( i, 1 );
\r
153 f.kill && f.kill();
\r
154 l === 1 && cancelFrame ? cancelFrame( requestID ) : X.Timer.remove( requestID );
\r