123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // 工具类
- 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;
- },
- };
|