//批量倒计时
function grouponcountdown(that, end_time, param, list) {
let timer;
try {
// 当页面隐藏或卸载时,停止倒计时
if (that.data.cleanTime) {
clearTimeout(timer)
console.log('停止')
return false;
};
var EndTime = new Date(end_time).getTime();
var NowTime = new Date().getTime();
var total_micro_second = EndTime - NowTime;
var groupons = that.data[list];
let time = dateformats(total_micro_second);
groupons[param].endtime = '倒计时:' + time;
if (total_micro_second <= 0) {
groupons[param].endtime = "直播已开始"
}
that.setData({
[list]: groupons
})
console.log('执行')
if (total_micro_second > 0) {
timer = setTimeout(async() => {
await grouponcountdown(that, end_time, param, list);
clearTimeout(timer)
}, 1000)
}
} catch (err) {
// 当列表中有部分倒计时执行完毕时保证其他倒计时正常执行
timer = setTimeout(async() => {
await grouponcountdown(that, end_time, param, list);
clearTimeout(timer)
}, 1000)
}
}
// 时间格式化输出,每1s都会调用一次
function dateformats(micro_second) {
// 总秒数
var second = Math.floor(micro_second / 1000);
// 小时
var hr = Math.floor(second / 3600);
var hrStr = hr.toString();
if (hrStr.length == 1) hrStr = '0' + hrStr;
// 分钟
var min = Math.floor(second / 60 % 60);
var minStr = min.toString();
if (minStr.length == 1) minStr = '0' + minStr;
// 秒
var sec = Math.floor(second % 60);
var secStr = sec.toString();
if (secStr.length == 1) secStr = '0' + secStr;
return hrStr + ":" + minStr + ":" + secStr;
}
应用
//列表获取到数据进行遍历
for (var i = 0; i < val.length; i++) {
var end_time = val[i].end_time.replace(/-/g, '/')
grouponcountdown(that, end_time, i, 'groupon')
}