savetheclocktower / javascript-stuff

Random things I've written in JavaScript. Most are untested and/or half-baked.

This URL has Read+Write access

javascript-stuff / custom-events / idle.js
100644 39 lines (32 sloc) 0.941 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* Fires a `state:idle` custom event after the user has been inactive for the
* given number of seconds. Fires a `state:active` event whenever the user
* interacts with the page.
*
* Adapted from kangax's code at:
* http://thinkweb2.com/projects/prototype/detect-idle-state-with-custom-events/
*/
 
(function() {
  var SECONDS_BEFORE_IDLE = 300;
  
  var EVENTS = [
    [window, 'scroll'],
    [window, 'resize'],
    [document, 'mousemove'],
    [document, 'keydown']
  ];
  
  var _timer, _idleTime;
  
  function resetTimer() {
    window.clearTimeout(_timer);
    _idleTime = new Date();
    _timer = window.setTimeout(setIdle, SECONDS_BEFORE_IDLE * 1000);
  }
  
  function setIdle() {
    document.fire("state:idle");
  }
  
  function setActive() {
    document.fire("state:active", { idleTime: new Date() - _idleTime });
    resetTimer();
  }
  
  EVENTS.each( function(e) {
    Event.observe(e[0], e[1], setActive);
  });
})();