Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
$ = jQuery
TIMEOUT = 20000
lastTime = (new Date()).getTime()
setInterval ->
currentTime = (new Date()).getTime()
# If timeout was paused (ignoring small
# variations) then trigger the 'wake' event
if currentTime > (lastTime + TIMEOUT + 2000)
lastTime = currentTime
$.fn.wake = (callback) ->
if typeof callback is 'function'
$(this).on('wake', callback)
$(this).trigger('wake', arguments...)
var TIMEOUT = 20000;
var lastTime = (new Date()).getTime();
setInterval(function() {
var currentTime = (new Date()).getTime();
if (currentTime > (lastTime + TIMEOUT + 2000)) {
lastTime = currentTime;
$.fn.wake = function(callback) {
if (typeof callback === 'function') {
return $(this).on('wake', callback);
} else {
return $(this).trigger('wake');

acdha commented Jul 29, 2013 might be preferable to churning Date instances. It's probably advisable to cache $(document) as well, although it's not called anywhere near as frequently.

I generally also prefer to simplify the math to avoid needing to repeat part of the calculation and bury the slop factor down in the implementation:

var maxDelta = Math.floor(TIMEOUT * 1.1);
if (currentTime - lastTime > maxDelta) {

Good point on the case:

I prefer the currentTime > (lastTime + TIMEOUT + 2000) notation though. Much more readable.

Apparently many browsers will pause setInterval when the browser window isn't focused, whichmeans this will trigger wake any time you focus another window for more than ~22 seconds. or am I misunderstanding something?

It appears that some do. Chrome/Firefox limit the setInterval time to around 1000 ms. IE/Safari/Opera have no restrictions. However, according to this that may not be true on iOS. For a more in depth explanation read this StackOverflow Post.

WakeUp is a jQuery library that does the same thing. I recommend combining this with the changes recommended by acdha above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment