A. 操作步骤:
商城–》秒杀商品详情页,显示倒计时–》下单支付,未支付–》商品订单详情页,显示支付倒计时
–》返回到秒杀商品详情页,该倒计时功能已失效
/**
* 倒计时
* endtime //截止时间(格式处理如yyyy-MM-dd hh:mm:ss或者yyyy/MM/dd hh:mm:ss)
* paramname //绑定数据对象名称(选填)
* isdayformat //是否进行"n天hh:mm:ss"格式返回(选填)
* invalidcb //倒计时失效后的回调
*/
setIntervalTime: function (_that, endtime, paramname, isdayformat,invalidcb) {
var seconds = dateUtil.getSecondDiff(endtime);
var that = this;
if (seconds <= 0) {
var timeval = {
timestr: '00:00:00',
h: '00',
m: '00',
s: '00'
};
var dataobj = {
isinvalid: true,
timeval: timeval
};
if (paramname) {
var obj = {};
var currst = _that.data[paramname];
currst["isinvalid"] = dataobj.isinvalid;
currst["timeval"] = dataobj.timeval;
obj[paramname] = currst;
_that.setData(obj);
} else {
_that.setData(dataobj);
}
typeof invalidcb == "function" && invalidcb();
return;
}
var timeval = dateUtil.transTime(seconds, isdayformat);
var dataobj = {
timeval: timeval
};
if (paramname) {
var obj = {};
var currst = _that.data[paramname];
currst["isinvalid"] = dataobj.isinvalid;
currst["timeval"] = dataobj.timeval;
obj[paramname] = currst;
_that.setData(obj);
} else {
_that.setData(dataobj);
}
if (this.globalData.intervalId) {
clearInterval(that.globalData.intervalId);
}
this.globalData.intervalId = setInterval(function () {
seconds = seconds - 1;
timeval = dateUtil.transTime(seconds, isdayformat);
console.log("enter-----setInterval:", seconds);
var dataobj = {
timeval: timeval
};
if (paramname) {
var obj = {};
var currst = _that.data[paramname];
currst["isinvalid"] = dataobj.isinvalid;
currst["timeval"] = dataobj.timeval;
obj[paramname] = currst;
_that.setData(obj);
} else {
_that.setData(dataobj);
}
if (seconds <= 0) {
clearInterval(that.globalData.intervalId);
that.globalData.intervalId = null;
timeval = {
timestr: '00:00:00',
h: '00',
m: '00',
s: '00'
};
var dataobj = {
isinvalid: true,
timeval: timeval
};
if (paramname) {
var obj = {};
var currst = _that.data[paramname];
currst["isinvalid"] = dataobj.isinvalid;
currst["timeval"] = dataobj.timeval;
obj[paramname] = currst;
_that.setData(obj);
} else {
_that.setData(dataobj);
}
typeof invalidcb == "function" && invalidcb();
}
}, 1000);
},
B. 项目中存在的问题:
该小程序中用到的倒计时,是全局设置的一个倒计时变量,因此只要生成了一个倒计时,同时也会覆盖掉之前所有打开页面的倒计时,在项目运行过程中会一直都执行
(备注:页面内定义的倒计时,也是在项目运行过程中一直执行)
C. 解决方案:
在页面的onhide(进入新页面,隐藏该页面)事件和onunload(关闭当前页面)事件中,清除全局倒计时;在页面的onshow(重新进入或者返回到该页面)事件中,根据条件重新设置全局倒计时。
注意:清除倒计时,
clearInterval(intervalid);
intervalid = null; //必须加这一条,因为clearInterval以后,intervalid还是有值的