forked from hsist/cryptoparty-web
parent
7f480976a1
commit
74b699edab
@ -0,0 +1,27 @@ |
|||||||
|
/* THE WRAPPER */ |
||||||
|
.countdown { |
||||||
|
display: flex; |
||||||
|
margin: 0 auto; |
||||||
|
max-width: 350px; |
||||||
|
background: #000; |
||||||
|
font-family: Impact, Charcoal, sans-serif; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
|
||||||
|
/* DAY/HR/MIN/SEC */ |
||||||
|
.countdown .square { |
||||||
|
flex-grow: 1; |
||||||
|
padding: 10px; |
||||||
|
margin: 5px; |
||||||
|
} |
||||||
|
.countdown .digits { |
||||||
|
font-size: 24px; |
||||||
|
background: #fff; |
||||||
|
color: #000; |
||||||
|
padding: 20px 10px; |
||||||
|
border-radius: 5px; |
||||||
|
} |
||||||
|
.countdown .text { |
||||||
|
margin-top: 10px; |
||||||
|
color: #ddd; |
||||||
|
} |
@ -0,0 +1,91 @@ |
|||||||
|
var counter = { |
||||||
|
instances : [], |
||||||
|
init : function (target, seconds, after) { |
||||||
|
// init() : attach countdown timer to target
|
||||||
|
// target : ID of target HTML div
|
||||||
|
// seconds : seconds to countdown
|
||||||
|
// after : what to do after countdown end (function)
|
||||||
|
|
||||||
|
// (A) THIS INSTANCE
|
||||||
|
let idx = counter.instances.length; |
||||||
|
counter.instances[idx] = {}; |
||||||
|
let inst = counter.instances[idx]; |
||||||
|
inst.remain = seconds; |
||||||
|
if (typeof after == "function") { inst.after = after; } |
||||||
|
|
||||||
|
// (B) GENERATE HTML
|
||||||
|
target = document.getElementById(target); |
||||||
|
target.classList.add("countdown"); |
||||||
|
inst.wrap = target; |
||||||
|
let gensquare = function(txt){ |
||||||
|
let square = document.createElement("div"), |
||||||
|
digits = document.createElement("div"), |
||||||
|
text = document.createElement("div"), |
||||||
|
ltxt = txt.toLowerCase(); |
||||||
|
digits.innerHTML = "00"; |
||||||
|
text.innerHTML = txt; |
||||||
|
square.classList.add("square"); |
||||||
|
square.classList.add(ltxt); |
||||||
|
digits.classList.add("digits"); |
||||||
|
text.classList.add("text"); |
||||||
|
square.appendChild(digits); |
||||||
|
square.appendChild(text); |
||||||
|
inst[ltxt] = digits; |
||||||
|
return square; |
||||||
|
}; |
||||||
|
target.innerHTML = ""; |
||||||
|
if (seconds >= 86400) { target.appendChild(gensquare("DAYS")); } |
||||||
|
if (seconds >= 3600) { target.appendChild(gensquare("HOURS")); } |
||||||
|
if (seconds >= 60) { target.appendChild(gensquare("MINUTES")); } |
||||||
|
target.appendChild(gensquare("SECONDS")); |
||||||
|
|
||||||
|
// (C) TIMER
|
||||||
|
inst.timer = setInterval(function(){ |
||||||
|
counter.tick(idx); |
||||||
|
}, 1000); |
||||||
|
}, |
||||||
|
|
||||||
|
tick : function(idx){ |
||||||
|
// tick() : count down ticker
|
||||||
|
// idx : target count down timer
|
||||||
|
|
||||||
|
// (A) TIMER STOP
|
||||||
|
let inst = counter.instances[idx]; |
||||||
|
inst.remain--; |
||||||
|
if (inst.remain <= 0 ) { |
||||||
|
clearInterval(inst.timer) |
||||||
|
inst.remain = 0; |
||||||
|
} |
||||||
|
|
||||||
|
// (B) CALCULATE REMAINING TIME
|
||||||
|
let secs = inst.remain; |
||||||
|
let days = Math.floor(secs / 86400); // 1 day = 60 secs * 60 mins * 24 hrs
|
||||||
|
secs -= days * 86400; |
||||||
|
let hours = Math.floor(secs / 3600); // 1 hr = 60 secs * 60 mins
|
||||||
|
secs -= hours * 3600; |
||||||
|
let mins = Math.floor(secs / 60); // 1 min = 60 secs
|
||||||
|
secs -= mins * 60; |
||||||
|
|
||||||
|
// (C) UPDATE HTML
|
||||||
|
inst.seconds.innerHTML = secs; |
||||||
|
if (inst.minutes !== undefined) { inst.minutes.innerHTML = mins; } |
||||||
|
if (inst.hours !== undefined) { inst.hours.innerHTML = hours; } |
||||||
|
if (inst.days !== undefined) { inst.days.innerHTML = days; } |
||||||
|
|
||||||
|
// (D) AFTER TIMER END
|
||||||
|
if (inst.remain == 0) { |
||||||
|
if (typeof inst.after == "function") { inst.after(idx); } |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
toSecs : function(yr, mth, day, hr, min, sec){ |
||||||
|
// toSecs() : convert given date/time to remaining seconds
|
||||||
|
// BEWARE - MONTH IS 0 to 11, JAN = 0 > DEC = 11
|
||||||
|
|
||||||
|
let remain = Date.UTC(yr, mth, day, hr, min, sec); |
||||||
|
remain = Math.floor(remain / 1000); |
||||||
|
remain = remain - Math.floor(Date.now() / 1000); |
||||||
|
if (remain < 0) { remain = 0; } |
||||||
|
return remain; |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue