X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F01_core%2F16_XTimer.js;h=2c005135135c3e6cb77c952632689a2cee194fa9;hb=dd4fcb6269ff74be253a767826aa5dfb96dd4acc;hp=681d5f8adbb4470b8e788287e65d83d3a59b1eb4;hpb=a3d03e96ad8c0392ef683eb6c64421e094b96958;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/01_core/16_XTimer.js b/0.6.x/js/01_core/16_XTimer.js index 681d5f8..2c00513 100644 --- a/0.6.x/js/01_core/16_XTimer.js +++ b/0.6.x/js/01_core/16_XTimer.js @@ -44,9 +44,7 @@ var */ X_Timer_now = Date.now || ( function(){ return +new Date; } ), - X_Timer_SET_TIMEOUT = window.setTimeout, - X_Timer_CLEAR_TIMEOUT = window.clearTimeout, - + // TODO X.AF.request, X.AF.cancel // http://uupaa.hatenablog.com/entry/2012/02/01/083607 // Firefox 4 partial (request only), Mobile Firefox5 ready (request only), Firefox 11 ready (cancel impl) X_Timer_REQ_ANIME_FRAME = @@ -183,6 +181,8 @@ var * @alias X.Timer */ X[ 'Timer' ] = { + // TODO IE4 の resolution は 64ms + 'RESOLUTION' : X_Timer_INTERVAL_TIME, 'now' : X_Timer_now, @@ -216,6 +216,7 @@ X[ 'Timer' ] = { function X_Timer_add( time, opt_count, args1, args2, args3 ){ var list = X_Timer_TICKET_LIST, hash, obj; + time = time < X_Timer_INTERVAL_TIME ? 1 : time / X_Timer_INTERVAL_TIME | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に; if( !X_Type_isNumber( opt_count ) ){ @@ -290,7 +291,7 @@ X[ 'Timer' ] = { }; if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){ - X.Timer[ '_' ] = X_Timer_onTimeout; + X[ 'Timer' ][ '_' ] = X_Timer_onTimeout; X_Timer_onTimeout = 'X.Timer._()'; }; @@ -368,7 +369,7 @@ function X_Timer_update(){ i = list.length, n; if( i === 0 ){ - X_Timer_timerId && X_Timer_CLEAR_TIMEOUT( X_Timer_timerId ); + X_Timer_timerId && clearTimeout( X_Timer_timerId ); X_Timer_timerId = 0; return; }; @@ -379,12 +380,12 @@ function X_Timer_update(){ if( n < X_Timer_waitTime || X_Timer_timerId === 0 ){ if( X_Timer_timerId ){ - X_Timer_CLEAR_TIMEOUT( X_Timer_timerId ); - n -= ( X_Timer_now() - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME | 0; + clearTimeout( X_Timer_timerId ); + n -= ( X_Timer_now() - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME; 0 <= n || ( n = 0 ); // 負の数は 0 に }; X_Timer_timeStamp = X_Timer_now(); - X_Timer_timerId = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n ); + X_Timer_timerId = setTimeout( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n | 0 ); X_Timer_waitTime = n; }; }; @@ -405,10 +406,10 @@ if( X_UA[ 'iOS' ] ){ window.addEventListener( 'scroll', function(){ var last, now; if( X_Timer_timerId ){ - X_Timer_CLEAR_TIMEOUT( X_Timer_timerId ); + clearTimeout( X_Timer_timerId ); now = X_Timer_now(); last = X_Timer_timeStamp + X_Timer_INTERVAL_TIME * X_Timer_waitTime - now; - X_Timer_timerId = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, 0 < last ? last : 0 ); + X_Timer_timerId = setTimeout( X_Timer_onTimeout, 0 < last ? last : 0 ); // 更新 X_Timer_timeStamp = now; X_Timer_waitTime = last / X_Timer_INTERVAL_TIME | 0;