util.js
// 小于10时前面加0
const formatNumber = m => {
return m < 10 ? "0" + m : m;
}
/*
* 倒计时时间格式转换
* time = 秒--必传
* isDay = 是否显示天数(如果不显示天数,天数自动换算成小时)--可选
*/
const countDown = (time, isDay) => {
let days = Math.floor(time / 86400);
let hours = Math.floor((time % 86400) / 3600);
let minutes = Math.floor(((time % 86400) % 3600) / 60);
let seconds = Math.floor(((time % 86400) % 3600) % 60);
return (isDay ? days + "天" : "") + (!isDay ? days * 24 + hours : formatNumber(hours)) + ":" + formatNumber(minutes) + ":" + formatNumber(seconds);
}
/*
* 执行倒计时,返回数据到当前页面
* time = 执行时间(秒)--必传
* location = 接收数据参数名(多个倒计时)--必传 (字符串)
* isDay = 是否显示天数,时间格式转换时使用--可选
*/
const getCountDown = (time, location, isDay) => {
let pages = getCurrentPages();
let prevPage = pages[pages.length - 1];
let timer = setInterval(function () {
time--;
// 格式转换并返回给页面指定参数
prevPage.setData({
[location]: countDown(time, isDay)
})
if (time === 0) {
prevPage.test();//结束后调用页面内的某个方法
clearInterval(timer);
return;
}
}, 1000)
}
// 方法暴露
module.exports = {
formatTime: formatTime,
getCountDown: getCountDown
}
页面调用
const util = require('../../utils/util.js')
data: {
list: [],
ss: [{
'yy': 9,
'bb': null
},
{
'z': 5
},
{
'b': 10
}
]
},
onLoad: function () {
var that = this;
util.getCountDown(that.data.ss[0].yy, 'ss[' + 0 + "].yy", false)
},
test() {
var that = this;
let revise = "ss[" + 0 + "].yy";//必须这样拼接
this.setData({
[revise]: "倒计时结束了"
})
},
WXML
<view>{{ss[0].yy}}</view>
效果图