OSDN Git Service

Version 0.6.47, fix for IE5 & Opera7.x.
[pettanr/clientJs.git] / 0.6.x / js / core / 05_XTimer.js
index 1dc1673..19e9ee0 100644 (file)
@@ -25,6 +25,7 @@ X.Timer = {
        timerId        : 0,\r
        endTime        : 0, // iOS\r
        next           : 0,\r
+       busy           : false, // for Opera7\r
 \r
        REQUEST_FRAME_LIST : [],\r
        requestID : 0,\r
@@ -34,6 +35,13 @@ X.Timer = {
                        list = X.Timer.TICKET_LIST,\r
                        i    = list.length,\r
                        q, f, c;\r
+               \r
+               if( X.Timer.busy ){\r
+                       alert( 'busy!' );\r
+               };\r
+               \r
+               X.Timer.busy = true;\r
+               \r
            for( ; i; ){\r
                q = list[ --i ];\r
                        if( 0 < ( q.l -= next ) ) continue;\r
@@ -49,7 +57,8 @@ X.Timer = {
                        q.l = q.t;\r
            };\r
            X.Timer.timerId = 0;\r
-           X.Timer._update();\r
+           X.Timer.busy = false;\r
+           X.Timer._update();  \r
        },\r
        _update : function(){\r
                var list = X.Timer.TICKET_LIST,\r
@@ -88,7 +97,7 @@ X.Timer = {
        add : function( time, opt_count, args1, args2, args3 ){\r
                var list = X.Timer.TICKET_LIST;\r
                time = time < X.Timer.INTERVAL_TIME ? 1 : ( time / X.Timer.INTERVAL_TIME ) | 0; // 正の数で使える「Math.floor(x)」を「(x | 0)」に;\r
-\r
+               \r
                if( typeof opt_count !== 'number' ){\r
                        args3 = args2;\r
                        args2 = args1;\r
@@ -103,7 +112,7 @@ X.Timer = {
                        f : X.Callback.create( args1, args2, args3 ),\r
                        u : ++X.Timer.uid\r
                };\r
-           X.Timer._update();\r
+           !X.Timer.busy && X.Timer._update();\r
            return X.Timer.uid;\r
        },\r
        once : function( time, args1, args2, args3 ){\r
@@ -121,7 +130,7 @@ X.Timer = {
                                list.splice( i, 1 );\r
                                f = q.f;\r
                                f.kill && f.kill();\r
-                               ( /* q[ INDEX_COUNT ] <= next  || */ l === 1 ) && X.Timer._update();\r
+                               !X.Timer.busy && ( /* q[ INDEX_COUNT ] <= next  || */ l === 1 ) && X.Timer._update();\r
                                //q.length = 0;\r
                                break;\r
                        };\r