84 lines
2.2 KiB
JavaScript
84 lines
2.2 KiB
JavaScript
// 工具类
|
|
import util from './util.js';
|
|
|
|
/**
|
|
* 倒计时类
|
|
*/
|
|
module.exports = {
|
|
|
|
// 计时器句柄
|
|
countIds: {},
|
|
|
|
start(countId, app, dataIndex, endCallBack) {
|
|
// console.log('start')
|
|
this.onSetTimeList(countId, app, dataIndex, endCallBack, 0)
|
|
},
|
|
|
|
onSetTimeList(countId, app, dataIndex, endCallBack, deep = 0) {
|
|
const _this = this;
|
|
// 获取倒计时数据对象
|
|
const countDownObj = app.data[dataIndex]
|
|
// 获取当前时间,同时得到活动结束时间数组
|
|
const newTime = new Date().getTime()
|
|
// 对结束时间进行处理渲染到页面
|
|
const endTime = new Date(util.format_date(countDownObj.date)).getTime();
|
|
// 初始化倒计时数据
|
|
countDownObj.dynamic = {
|
|
// day: '00',
|
|
hou: '00',
|
|
min: '00',
|
|
sec: '00'
|
|
};
|
|
// 如果活动未结束,对时间进行处理
|
|
if (endTime - newTime > 0) {
|
|
const diffTime = (endTime - newTime) / 1000;
|
|
// 获取时、分、秒
|
|
// day = parseInt(diffTime / 86400),
|
|
const hou = parseInt(diffTime / 3600),
|
|
min = parseInt(diffTime % 3600 / 60),
|
|
sec = parseInt(diffTime % 3600 % 60);
|
|
countDownObj.dynamic.hou = _this.timeFormat(hou)
|
|
countDownObj.dynamic.min = _this.timeFormat(min)
|
|
countDownObj.dynamic.sec = _this.timeFormat(sec)
|
|
}
|
|
|
|
// 渲染,然后每隔一秒执行一次倒计时函数
|
|
app.setData({
|
|
[`${dataIndex}`]: countDownObj
|
|
})
|
|
// 判断倒计时是否结束
|
|
const isEnd = _this.isEnd(countDownObj);
|
|
// 结束后执行回调函数
|
|
isEnd && deep > 0 && endCallBack && endCallBack();
|
|
// 重复执行
|
|
_this.countIds[countId] && clearTimeout(_this.countIds[countId])
|
|
if (!isEnd) {
|
|
_this.countIds[countId] = setTimeout(() => {
|
|
_this.onSetTimeList(countId, app, dataIndex, endCallBack, ++deep)
|
|
}, 1000)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 判断倒计时是否结束
|
|
* @param {*} countDownObj
|
|
*/
|
|
isEnd(countDownObj) {
|
|
const {
|
|
dynamic
|
|
} = countDownObj
|
|
if (dynamic.hou == '00' && dynamic.min == '00' && dynamic.sec == '00') {
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
/**
|
|
* 小于10的格式化函数
|
|
*/
|
|
timeFormat(param) {
|
|
return param < 10 ? '0' + param : param;
|
|
},
|
|
|
|
|
|
}; |