vue列表实现实实时倒计时 ,通过setTimeout和vue数据和页面双向绑定渲染实现
上代码:
{{getDaoTime(index,'time','time_dao')}}
export default {
data() {
return {
listDao:[
{
time:86400,//秒
},{
time:8400,//秒
}
]
}
},
methods:{
//倒计时方法
//index列表内的index
//key倒计时秒的键名
//显示时倒计时的键名(这个需要自己定义)
getDaoTime(index,key,key1){
if(this.listDao.length){
if(!this.listDao[index].nowTime){
this.$set(this.listDao[index],'nowTime',new Date().getTime())
}
if(!this.listDao[index][key]){
this.$set(this.listDao[index],key1,'--')
}else{
let time=this.listDao[index][key]-1
if(time>0){
setTimeout(()=>{
if(new Date().getTime()-this.listDao[index].nowTime>=1000){
this.$set(this.listDao[index],key,time)
this.$set(this.listDao[index],key1,this.dayCha(time))
this.$set(this.listDao[index],'nowTime',new Date().getTime())
}
},1000)
}else{
this.$set(this.listDao[index],key1,'--')
this.$set(this.listDao[index],'nowTime',new Date().getTime())
}
}
}
return this.listDao[index][key1]
},
// 计算时间差
dayCha(value,geshi='天-小时-分-秒',type='string'){
let geshiArray=geshi.split('-')
var chaTime=value;
var day=parseInt(chaTime/86400)
var yu=chaTime % 86400
var hour=parseInt(yu/3600)
var yuH=yu % 3600
var min=parseInt(yuH/60)
var yuM=yuH%60
var sec=yuM
// console.log(value,day,hour,min,sec)
if(type=='string'){
let str=''
if(day>0)str+=Vue.prototype.twoString(day)+geshiArray[0]
if(hour>0)str+=Vue.prototype.twoString(hour)+geshiArray[1]
if(min>=0)str+=Vue.prototype.twoString(min)+geshiArray[2]
if(sec>=0)str+=Vue.prototype.twoString(sec)+geshiArray[3]
if(day<=0 && hour<=0 && min<=0 && sec<=0){
str=''
}
if(str==''){
str='--'
}
return str
}else{
return {day:day,hour:hour,minute:min,second:sec}
}
}
}
}
效果:



