OSDN Git Service

Fix the bug of X.NodeAnime.
[pettanr/clientJs.git] / 0.6.x / js / 01_core / 16_XTimer.js
index 681d5f8..b8c50ff 100644 (file)
@@ -44,9 +44,7 @@ var
         */\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
+       // TODO X.AF.request, X.AF.cancel\r
        // http://uupaa.hatenablog.com/entry/2012/02/01/083607\r
        // Firefox 4 partial (request only), Mobile Firefox5 ready (request only), Firefox 11 ready (cancel impl)       \r
        X_Timer_REQ_ANIME_FRAME =\r
@@ -183,6 +181,8 @@ var
  * @alias X.Timer\r
  */ \r
 X[ 'Timer' ] = {\r
+       // TODO IE4 の resolution は 64ms\r
+       'RESOLUTION'   : X_Timer_INTERVAL_TIME,\r
 \r
        'now'          : X_Timer_now,\r
        \r
@@ -216,6 +216,7 @@ X[ 'Timer' ] = {
        function X_Timer_add( time, opt_count, args1, args2, args3 ){\r
                var list = X_Timer_TICKET_LIST,\r
                        hash, obj;\r
+\r
                time = time < X_Timer_INTERVAL_TIME ? 1 : time / X_Timer_INTERVAL_TIME | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
                \r
                if( !X_Type_isNumber( opt_count ) ){\r
@@ -290,7 +291,7 @@ X[ 'Timer' ] = {
        };\r
 \r
 if( X_UA[ 'IE4' ] || X_UA[ 'MacIE' ] ){\r
-       X.Timer[ '_' ] = X_Timer_onTimeout;\r
+       X[ 'Timer' ][ '_' ] = X_Timer_onTimeout;\r
        X_Timer_onTimeout = 'X.Timer._()';\r
 };\r
 \r
@@ -361,6 +362,8 @@ function X_Timer_onTimeout(){
        X_Timer_removal = null;\r
     };\r
     X_Timer_update();\r
+    \r
+    ExecuteAtEnd_onEnd();\r
 };\r
 \r
 function X_Timer_update(){\r
@@ -368,7 +371,7 @@ function X_Timer_update(){
                i    = list.length,\r
                n;\r
        if( i === 0 ){\r
-               X_Timer_timerId && X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
+               X_Timer_timerId && clearTimeout( X_Timer_timerId );\r
                X_Timer_timerId = 0;\r
                return;\r
        };\r
@@ -379,12 +382,12 @@ function X_Timer_update(){
     \r
     if( n < X_Timer_waitTime || X_Timer_timerId === 0 ){\r
        if( X_Timer_timerId ){\r
-               X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
-               n -= ( X_Timer_now() - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME | 0;\r
+               clearTimeout( X_Timer_timerId );\r
+               n -= ( X_Timer_now() - X_Timer_timeStamp ) / X_Timer_INTERVAL_TIME;\r
                0 <= n || ( n = 0 ); // 負の数は 0 に\r
        };\r
        X_Timer_timeStamp = X_Timer_now();\r
-       X_Timer_timerId   = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n );\r
+       X_Timer_timerId   = setTimeout( X_Timer_onTimeout, X_Timer_INTERVAL_TIME * n | 0 );\r
        X_Timer_waitTime  = n;\r
     };\r
 };\r
@@ -405,10 +408,10 @@ if( X_UA[ 'iOS' ] ){
        window.addEventListener( 'scroll', function(){\r
                var last, now;\r
                if( X_Timer_timerId ){\r
-                       X_Timer_CLEAR_TIMEOUT( X_Timer_timerId );\r
+                       clearTimeout( X_Timer_timerId );\r
                        now               = X_Timer_now();\r
                        last              = X_Timer_timeStamp + X_Timer_INTERVAL_TIME * X_Timer_waitTime - now;\r
-                       X_Timer_timerId   = X_Timer_SET_TIMEOUT( X_Timer_onTimeout, 0 < last ? last : 0 );\r
+                       X_Timer_timerId   = setTimeout( X_Timer_onTimeout, 0 < last ? last : 0 );\r
                        // 更新\r
                        X_Timer_timeStamp = now;\r
                        X_Timer_waitTime  = last / X_Timer_INTERVAL_TIME | 0;\r
@@ -452,6 +455,8 @@ function X_Timer_onEnterFrame( time ){
        };\r
        X_Timer_removal = null;\r
     };\r
+    \r
+    ExecuteAtEnd_onEnd();\r
 };\r
 \r
 console.log( 'X.Core.Timer' );\r