mirror of
https://github.com/ai/visibilityjs.git
synced 2026-01-14 15:57:59 -05:00
1 line
2.9 KiB
JavaScript
1 line
2.9 KiB
JavaScript
(function(){"use strict";var a=function(a){return"undefined"!=typeof a};window.Visibility={_doc:window.document,_prefixes:["webkit","moz","o","ms"],_chechedPrefix:null,_listening:!1,_changeCallbacks:[],_onVisibleCallbacks:[],_notPrerenderCallbacks:[],_lastTimer:0,_timers:{},_hiddenBefore:!1,_init:function(){this._hiddenBefore=this.hidden(),a(window.jQuery)&&a(jQuery.every)?this._setInterval=this._chronoSetInterval:this._setInterval=this._originalSetInterval},_prefix:function(){if(null!==this._chechedPrefix)return this._chechedPrefix;if(a(this._doc.visibilityState))return this._chechedPrefix="";var b;for(var c=0;c<this._prefixes.length;c++){b=this._prefixes[c]+"VisibilityState";if(a(this._doc[b]))return this._chechedPrefix=this._prefixes[c]}},_name:function(a){var b=this._prefix();return""==b?a:b+a.substr(0,1).toUpperCase()+a.substr(1)},_prop:function(a){return this._doc[this._name(a)]},_onVisibilityChange:function(a){var b=this.hidden(),c=this.state();for(var d=0;d<this._changeCallbacks.length;d++)this._changeCallbacks[d].call(this._doc,a,c);var e=this._hiddenBefore;if(b&&!e||!b&&e)for(d in this._timers)this._stopTimer(d),this._runTimer(d,!b);if(!b){for(var d=0;d<this._onVisibleCallbacks.length;d++)this._onVisibleCallbacks[d]();this._onVisibleCallbacks=[]}if("prerender"!=this.state()){for(var d=0;d<this._notPrerenderCallbacks.length;d++)this._notPrerenderCallbacks[d]();this._notPrerenderCallbacks=[]}this._hiddenBefore=b},_setListener:function(){if(!this._listening){var a=this._prefix()+"visibilitychange";this._doc.addEventListener(a,function(){Visibility._onVisibilityChange.apply(Visibility,arguments)},!1),this._listening=!0,this._hiddenBefore=this.hidden()}},_originalSetInterval:function(a,b){return setInterval(a,b)},_chronoSetInterval:function(a,b){return jQuery.every(b,a)},_setInterval:null,_runTimer:function(a,b){var c,d=this._timers[a];if(this.hidden()){if(null===d.hiddenInterval)return;c=d.hiddenInterval}else c=d.interval;b&&d.callback.call(window),d.intervalID=this._setInterval(d.callback,c)},_stopTimer:function(a){var b=this._timers[a];clearInterval(b.intervalID),delete b.intervalID},support:function(){return a(this._prefix())},hidden:function(){if(!this.support())return!1;return this._prop("hidden")},state:function(){if(!this.support())return"visible";return this._prop("visibilityState")},change:function(a){if(!this.support())return!1;this._changeCallbacks.push(a),this._setListener();return!0},onVisible:function(a){if(!this.support()||!this.hidden()){a();return!0}this._onVisibleCallbacks.push(a),this._setListener()},notPrerender:function(a){if(!this.support()||"prerender"!=this.state()){a();return!0}this._notPrerenderCallbacks.push(a),this._setListener()},every:function(b,c,d){a(d)||(d=c,c=null),this._lastTimer+=1;var e=this._lastTimer;this._timers[e]={interval:b,hiddenInterval:c,callback:d},this._runTimer(e,!1);return e},stop:function(b){var c=this._timers[b];if(!a(c))return!1;this._stopTimer(b),delete this._timers[b];return c}},Visibility._init()})() |