/
interactioncheck.js
96 lines (71 loc) · 2.01 KB
/
interactioncheck.js
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
function InteractionCheck(event, interval, callback, startImmediately, restart) {
this.event = event || 'mousemove';
this.interval = interval || 6000;
this.startImmediately = (typeof startImmediately === "undefined") ? true : startImmediately;
this.restart = (typeof restart === "undefined") ? true : restart;
this.callback = callback || undefined;
this.timer = null;
this.state = 'idle';
// Start listening for the event
document.addEventListener(this.event, listener.bind(this), true);
// Ensures the timer starts immediately if startImmediately === true
if (this.startImmediately) {
this.start.call(this);
}
// Event listener
function listener() {
if (this.state !== 'idle') {
this.start.call(this);
}
}
}
/**
* Clear the timer
*/
InteractionCheck.prototype.clearTimer = function() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
};
/**
* Trigger your callback and stop timer
* Timer will be restarted if this.restart === true
*/
InteractionCheck.prototype.triggerCallback = function() {
this.state = 'idle';
this.timer = null;
this.callback();
if (this.restart) {
this.start.call(this);
}
};
/**
* Start the timer
* Public method, can be called manually
*/
InteractionCheck.prototype.start = function() {
this.clearTimer.call(this);
this.state = 'active';
this.timer = setTimeout(this.triggerCallback.bind(this), this.interval);
};
/**
* Stop the interaction checker
* Public method, can be called manually
*/
InteractionCheck.prototype.stop = function() {
this.state = 'idle';
this.clearTimer.call(this);
};
// Check for AMD/Module support, otherwise define trak as a global variable.
if (typeof define !== 'undefined' && define.amd) {
// AMD. Register as an anonymous module.
define (function() {
'use strict';
return InteractionCheck;
});
} else if (typeof module !== 'undefined' && module.exports) {
module.exports = InteractionCheck;
} else {
window.InteractionCheck = InteractionCheck;
}