|
|
@@ -1,6 +1,6 @@
|
|
|
class Timer {
|
|
|
|
|
|
- constructor( usePageVisibilityAPI = true ) {
|
|
|
+ constructor() {
|
|
|
|
|
|
this._previousTime = 0;
|
|
|
this._currentTime = 0;
|
|
|
@@ -11,11 +11,18 @@ class Timer {
|
|
|
|
|
|
this._timescale = 1;
|
|
|
|
|
|
- // use Page Visibility API to avoid large time delta values
|
|
|
+ this._document = null;
|
|
|
+ this._pageVisibilityHandler = null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- this._usePageVisibilityAPI = ( usePageVisibilityAPI === true ) && ( typeof document !== 'undefined' && document.hidden !== undefined );
|
|
|
+ connect( document ) {
|
|
|
|
|
|
- if ( this._usePageVisibilityAPI === true ) {
|
|
|
+ this._document = document;
|
|
|
+
|
|
|
+ // use Page Visibility API to avoid large time delta values
|
|
|
+
|
|
|
+ if ( document.hidden !== undefined ) {
|
|
|
|
|
|
this._pageVisibilityHandler = handleVisibilityChange.bind( this );
|
|
|
|
|
|
@@ -25,6 +32,19 @@ class Timer {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ disconnect() {
|
|
|
+
|
|
|
+ if ( this._pageVisibilityHandler !== null ) {
|
|
|
+
|
|
|
+ this._document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );
|
|
|
+ this._pageVisibilityHandler = null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ this._document = null;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
getDelta() {
|
|
|
|
|
|
return this._delta / 1000;
|
|
|
@@ -61,11 +81,7 @@ class Timer {
|
|
|
|
|
|
dispose() {
|
|
|
|
|
|
- if ( this._usePageVisibilityAPI === true ) {
|
|
|
-
|
|
|
- document.removeEventListener( 'visibilitychange', this._pageVisibilityHandler );
|
|
|
-
|
|
|
- }
|
|
|
+ this.disconnect();
|
|
|
|
|
|
return this;
|
|
|
|
|
|
@@ -73,8 +89,7 @@ class Timer {
|
|
|
|
|
|
update( timestamp ) {
|
|
|
|
|
|
-
|
|
|
- if ( this._usePageVisibilityAPI === true && document.hidden === true ) {
|
|
|
+ if ( this._pageVisibilityHandler !== null && this._document.hidden === true ) {
|
|
|
|
|
|
this._delta = 0;
|
|
|
|
|
|
@@ -121,7 +136,7 @@ function now() {
|
|
|
|
|
|
function handleVisibilityChange() {
|
|
|
|
|
|
- if ( document.hidden === false ) this.reset();
|
|
|
+ if ( this._document.hidden === false ) this.reset();
|
|
|
|
|
|
}
|
|
|
|