微信小程序> 小程序setInterval定时器问题

小程序setInterval定时器问题

浏览量:1340 时间: 来源:小僵尸喵喵喵

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还是有值的

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎