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
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
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
requestFrame : function( args1, args2, args3 ){\r
var i = REQUEST_FRAME_LIST.length,\r
f;\r
- i === 0 && ( requestID = ( enterFrame ? enterFrame( onEnterFrame ) : X.Timer.add( 16, 1, onEnterFrame ) ) );\r
+ i === 0 && ( requestID = ( enterFrame ? enterFrame( onEnterFrame ) : X.Timer.add( 0, 1, onEnterFrame ) ) );\r
f = REQUEST_FRAME_LIST[ i ] = X.Callback.create( args1, args2, args3 );\r
return f.uid = ++uid;\r
},\r