@@ -61,6 +61,14 @@ var Ticker = function() {
61
61
**/
62
62
Ticker . useRAF = null ;
63
63
64
+ /**
65
+ * Specifies the animation target to use with requestAnimationFrame if useRAF is true.
66
+ * @property animationTarget
67
+ * @static
68
+ * @type Object
69
+ **/
70
+ Ticker . animationTarget = null ;
71
+
64
72
/**
65
73
* Event broadcast once each tick / interval. The interval is specified via the
66
74
* .setInterval(ms) or setFPS methods.
@@ -204,7 +212,7 @@ var Ticker = function() {
204
212
Ticker . _tickTimes = [ ] ;
205
213
Ticker . _pauseable = [ ] ;
206
214
Ticker . _listeners = [ ] ;
207
- Ticker . _times . push ( Ticker . _startTime = Ticker . _getTime ( ) ) ;
215
+ Ticker . _times . push ( Ticker . _lastTime = Ticker . _startTime = Ticker . _getTime ( ) ) ;
208
216
Ticker . setInterval ( Ticker . _interval ) ;
209
217
}
210
218
@@ -241,20 +249,9 @@ var Ticker = function() {
241
249
* @param {Number } interval Time in milliseconds between ticks. Default value is 50.
242
250
**/
243
251
Ticker . setInterval = function ( interval ) {
244
- Ticker . _lastTime = Ticker . _getTime ( ) ;
245
252
Ticker . _interval = interval ;
246
- if ( Ticker . timeoutID != null ) { clearTimeout ( Ticker . timeoutID ) ; }
247
- if ( Ticker . useRAF ) {
248
- if ( Ticker . _rafActive ) { return ; }
249
- Ticker . _rafActive = true ;
250
- var f = window . requestAnimationFrame || window . webkitRequestAnimationFrame || window . mozRequestAnimationFrame ||
251
- window . oRequestAnimationFrame || window . msRequestAnimationFrame ;
252
- if ( f ) {
253
- f ( Ticker . _handleAF ) ;
254
- return ;
255
- }
256
- }
257
- if ( Ticker . _inited ) { Ticker . timeoutID = setTimeout ( Ticker . _handleTimeout , interval ) ; }
253
+ if ( ! Ticker . _inited ) { return ; }
254
+ Ticker . _setupTick ( ) ;
258
255
}
259
256
260
257
/**
@@ -301,8 +298,8 @@ var Ticker = function() {
301
298
Ticker . getMeasuredFPS = function ( ticks ) {
302
299
if ( Ticker . _times . length < 2 ) { return - 1 ; }
303
300
304
- // by default, calculate fps for the past 1/2 second:
305
- if ( ticks == null ) { ticks = Ticker . getFPS ( ) >> 1 ; }
301
+ // by default, calculate fps for the past 1 second:
302
+ if ( ticks == null ) { ticks = Ticker . getFPS ( ) | 0 ; }
306
303
ticks = Math . min ( Ticker . _times . length - 1 , ticks ) ;
307
304
return 1000 / ( ( Ticker . _times [ 0 ] - Ticker . _times [ ticks ] ) / ticks ) ;
308
305
}
@@ -365,13 +362,8 @@ var Ticker = function() {
365
362
if ( timeStamp - Ticker . _lastTime >= Ticker . _interval - 1 ) {
366
363
Ticker . _tick ( ) ;
367
364
}
368
- if ( Ticker . useRAF ) {
369
- var f = window . requestAnimationFrame || window . webkitRequestAnimationFrame || window . mozRequestAnimationFrame ||
370
- window . oRequestAnimationFrame || window . msRequestAnimationFrame ;
371
- f ( Ticker . _handleAF , Ticker . animationTarget ) ;
372
- } else {
373
- Ticker . _rafActive = false ;
374
- }
365
+ Ticker . _rafActive = false ;
366
+ Ticker . _setupTick ( ) ;
375
367
}
376
368
377
369
/**
@@ -380,7 +372,21 @@ var Ticker = function() {
380
372
**/
381
373
Ticker . _handleTimeout = function ( ) {
382
374
Ticker . _tick ( ) ;
383
- if ( ! Ticker . useRAF ) { Ticker . timeoutID = setTimeout ( Ticker . _handleTimeout , Ticker . _interval ) ; }
375
+ Ticker . timeoutID = null ;
376
+ Ticker . _setupTick ( ) ;
377
+ }
378
+
379
+ Ticker . _setupTick = function ( ) {
380
+ if ( Ticker . _rafActive || Ticker . timeoutID != null ) { return ; } // avoid duplicates
381
+ if ( Ticker . useRAF ) {
382
+ var f = window . requestAnimationFrame || window . webkitRequestAnimationFrame || window . mozRequestAnimationFrame || window . oRequestAnimationFrame || window . msRequestAnimationFrame ;
383
+ if ( f ) {
384
+ f ( Ticker . _handleAF , Ticker . animationTarget ) ;
385
+ Ticker . _rafActive = true ;
386
+ return ;
387
+ }
388
+ }
389
+ Ticker . timeoutID = setTimeout ( Ticker . _handleTimeout , Ticker . _interval ) ;
384
390
}
385
391
386
392
/**
0 commit comments