OSDN Git Service

Version 0.6.41, fix for Opera8 & NN7.2+.
[pettanr/clientJs.git] / 0.6.x / js / core / 05_XTimer.js
index 3b1b261..6df8821 100644 (file)
@@ -8,7 +8,8 @@ X.Timer = ( function(){
                INTERVAL_TIME  = 16,\r
                TICKET_LIST    = [],\r
                uid            = 0,\r
-               timerId        = -1,\r
+               timerId        = 0,\r
+               endTime        = 0,\r
                next           = 0,\r
                INDEX_TIME     = 0,\r
                INDEX_LAST     = 1,\r
@@ -36,7 +37,7 @@ X.Timer = ( function(){
                        if( 1 < c ) --queue[ INDEX_COUNT ];\r
                        queue[ INDEX_LAST ] = queue[ INDEX_TIME ];\r
            };\r
-           timerId = -1;\r
+           timerId = 0;\r
            update();\r
        };\r
        function update(){\r
@@ -46,19 +47,31 @@ X.Timer = ( function(){
                        last;\r
                if( l === 0 ){\r
                        timerId !== -1 && clearTimeout( timerId );\r
-                       timerId = -1;\r
+                       timerId = 0;\r
                        return;\r
                };\r
            for( ; l; ){\r
                ( last = list[ --l ][ INDEX_LAST ] ) < n && ( n = last );\r
            };\r
-           if( n < next || timerId === -1 ){\r
-               timerId !== -1 && clearTimeout( timerId );\r
-               timerId = setTimeout( loop, INTERVAL_TIME * n );\r
+           if( n < next || timerId === 0 ){\r
+               timerId !== 0 && clearTimeout( timerId );\r
+               timerId   = setTimeout( loop, INTERVAL_TIME * n );\r
+               endTime   = X.getTime() + INTERVAL_TIME * n;\r
                next = n;\r
            };\r
        };\r
        \r
+       // http://havelog.ayumusato.com/develop/javascript/e528-ios6_scrolling_timer_notcall.html\r
+       // iOS6 スクロール中のタイマー発火絡みのバグ備忘\r
+       if( X.UA.iOS ){\r
+                window.addEventListener( 'scroll', function(){\r
+                       if( timerId ){\r
+                               clearTimeout( timerId );\r
+                               timerId = setTimeout( loop, Math.max( 0, endTime - X.getTime() ) );\r
+                       };\r
+                } );\r
+       };\r
+       \r
        var enterFrame =\r
                        window.requestAnimationFrame ||\r
                        window.webkitRequestAnimationFrame ||\r