-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
103 lines (89 loc) · 2 KB
/
index.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
97
98
99
100
101
102
103
/**
* countdown class
*
* @author lxfriday
* @param leftTime {number} time(second) left for countdown
* @param i {number} period time(second) to execute `onDown`
*/
function CountDown(leftTime, i) {
var self = this;
// timer
self.timer = null;
// at least one param
if (!arguments.length) {
throw new Error('at least one param for countdown steper to execute');
}
// init time
self.initialLeftTime = +leftTime;
// temp self subtract
self.availableTime = +leftTime;
// cached time when paused
self.cachePauseTime = +leftTime;
// period interval
self.interval = i || 1;
}
/**
* countdown executor
*/
CountDown.prototype.steper = function () {
var self = this;
if (self.availableTime > 0) {
function func() {
self.timer = setTimeout(function () {
self.availableTime -= self.interval;
/**
* hack callback
*/
self.onDown(self.availableTime);
if (self.availableTime > 0) {
func();
}
}, self.interval * 1000);
}
func();
}
};
/**
* called every period, hack func
*/
CountDown.prototype.onDown = function (availableTime) { };
/**
* pause countdown temporarily
*/
CountDown.prototype.pause = function () {
this.cachePauseTime = this.availableTime;
this.availableTime = 0;
clearTimeout(this.timer);
};
/**
* stop countdown
*/
CountDown.prototype.stop = function () {
this.availableTime = 0;
this.cachePauseTime = 0;
clearTimeout(this.timer);
};
/**
* start countdown
*/
CountDown.prototype.start = function () {
this.availableTime = this.cachePauseTime;
clearTimeout(this.timer);
this.steper();
};
/**
* reset the available time to initial time
*/
CountDown.prototype.reset = function () {
this.availableTime = this.initialLeftTime;
this.cachePauseTime = this.initialLeftTime;
clearTimeout(this.timer);
};
/**
* restart countdown using the initial leftTime
*/
CountDown.prototype.restart = function () {
this.reset();
this.start();
};
module.exports = CountDown;