<template>
<span class="setInterval-box">{{time}}</span>
</template>
<script>
export default {
name: 'Timer',
data() {
return {
hour: 0,
minute: 0,
second: 0,
timer: null
}
},
props: {
remainingTime: {
type: String,
default: '00:00:00'
}
},
computed: {
time() {
return `${this.hour < 10 ? `0${this.hour}` : this.hour}:${parseInt(this.minute / 60, 0) < 10 ? `0${parseInt(this.minute / 60, 0)}` : parseInt(this.minute / 60, 0)}:${this.second < 10 ? `0${this.second}` : this.second}`
}
},
mounted() {
if (this.remainingTime) {
const Array = this.remainingTime.split(':')
this.hour = parseInt(Array[0], 0)
this.minute = parseInt(Array[1], 0)
this.second = parseInt(Array[2], 0)
this.timeDown()
}
},
methods: {
timeDown() {
let totalSecond = this.hour * 3600 + this.minute * 60 + this.second;
const second2Time = (seconds) => {
this.hour = parseInt(seconds / 3600, 0);
this.minute = parseInt(seconds % 3600, 0);
this.second = parseInt(seconds % 3600 % 60, 0);
};
this.timer = setInterval(() => {
if (totalSecond) {
totalSecond -= 1;
second2Time(totalSecond)
} else {
clearInterval(this.timer)
}
}, 1000)
}
},
beforeDestroy() {
clearInterval(this.timer)
},
}
</script>