This is a demo for idle state notifier using prototype.js. Notifier is defined as a self containing class which fires state:active and state:idle custom events. You can read more about it in this post
let's see...var Notifier = Class.create({ _events: [[window, 'scroll'], [window, 'resize'], [document, 'mousemove'], [document, 'keydown']], _timer: null, _idleTime: null, initialize: function(time) { this.time = time; this.initObservers(); this.setTimer(); }, initObservers: function() { this._events.each(function(e) { Event.observe(e[0], e[1], this.onInterrupt.bind(this)) }.bind(this)) }, onInterrupt: function() { document.fire('state:active', { idleTime: new Date() - this._idleTime }); this.setTimer(); }, setTimer: function() { clearTimeout(this._timer); this._idleTime = new Date(); this._timer = setTimeout(function() { document.fire('state:idle'); }, this.time) } }) document.observe('dom:loaded', function() { new Notifier(2000); document.observe('state:idle', onIdle).observe('state:active', onActive); var p = $$('p')[0], info = $('info'); function onIdle(e) { p.setOpacity(0.2); info.innerHTML = 'idled...' } function onActive(e) { p.setOpacity(1); info.innerHTML = 'active... after: ' + e.memo.idleTime + ' ms'; } })