|
|
@@ -0,0 +1,90 @@ |
|
|
|
Component({ |
|
|
|
properties: { |
|
|
|
target: Number, |
|
|
|
showDay: Boolean, |
|
|
|
callback: String, |
|
|
|
format: Array, |
|
|
|
clearTimer: Boolean |
|
|
|
}, |
|
|
|
externalClasses: ['countdown-class'], |
|
|
|
data: { |
|
|
|
time: '', |
|
|
|
resultFormat: [], |
|
|
|
changeFormat: false |
|
|
|
}, |
|
|
|
ready() { |
|
|
|
this.getFormat(); |
|
|
|
|
|
|
|
}, |
|
|
|
methods: { |
|
|
|
getFormat() { |
|
|
|
const data = this.data; |
|
|
|
const len = data.format.length; |
|
|
|
|
|
|
|
if (!data.showDay) data.resultFormat.push(''); |
|
|
|
|
|
|
|
if (len >= 3) { |
|
|
|
for (let i = 0; i < len; i++) { |
|
|
|
if (data.resultFormat.length >= 4) break; |
|
|
|
if (data.format[i]) { |
|
|
|
data.resultFormat.push(data.format[i].toString()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (data.resultFormat.length >= 4) data.changeFormat = true; |
|
|
|
} |
|
|
|
|
|
|
|
this.getLastTime(); |
|
|
|
}, |
|
|
|
init() { |
|
|
|
const self = this; |
|
|
|
setTimeout(function () { |
|
|
|
self.getLastTime.call(self); |
|
|
|
}, 1000); |
|
|
|
}, |
|
|
|
getLastTime() { |
|
|
|
const data = this.data; |
|
|
|
const gapTime = Math.ceil((data.target - new Date().getTime()) / 1000); |
|
|
|
let result = ''; |
|
|
|
let time = '00:00:00'; |
|
|
|
let day = '00'; |
|
|
|
const format = data.resultFormat; |
|
|
|
|
|
|
|
if (gapTime > 0) { |
|
|
|
day = this.formatNum(parseInt(gapTime / 86400)); |
|
|
|
let lastTime = gapTime % 86400; |
|
|
|
const hour = this.formatNum(parseInt(lastTime / 3600)); |
|
|
|
lastTime = lastTime % 3600; |
|
|
|
const minute = this.formatNum(parseInt(lastTime / 60)); |
|
|
|
const second = this.formatNum(lastTime % 60); |
|
|
|
|
|
|
|
if (data.changeFormat) time = `${hour}${format[1]}${minute}${format[2]}${second}${format[3]}`; |
|
|
|
else time = `${hour}:${minute}:${second}`; |
|
|
|
|
|
|
|
if (!data.clearTimer) this.init.call(this); |
|
|
|
} else { |
|
|
|
this.endfn(); |
|
|
|
} |
|
|
|
|
|
|
|
if (data.showDay) { |
|
|
|
if (data.changeFormat) { |
|
|
|
result = `${day}${format[0]} ${time}`; |
|
|
|
} else { |
|
|
|
result = `${day}d ${time}`; |
|
|
|
} |
|
|
|
} else { |
|
|
|
result = time; |
|
|
|
} |
|
|
|
this.setData({ |
|
|
|
time: result |
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
formatNum(num) { |
|
|
|
return num > 9 ? num : `0${num}`; |
|
|
|
}, |
|
|
|
endfn() { |
|
|
|
this.triggerEvent('callback', {}); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |