微信小程序> 小程序踩坑倒计时踩坑(倒计时快速切换显示异常)

小程序踩坑倒计时踩坑(倒计时快速切换显示异常)

浏览量:595 时间: 来源:Seeyoucm

常见需求:

  1. 订单列表,快速切换导航栏倒计时倒数异常
    小程序

通常实现:
(1)只是局部实现倒计时,不将倒计时进行页面全局处理存入data中只是在倒计时结束清空倒计时,问题在快速切换导航条的时候倒计时会表现异常
(2)像网上大部分做法将倒计时通过setData存入数据中,然后在页面卸载的时候清除.这里会有一个问题就是在列表数据中处理的倒计时,如果直接setData存入,然后通过clearInterval(this.data.xxx)在页面卸载的时候进行清除,常常在这种时候,倒计时是清除不了的,尝试过很多次,在原本的定时器中依然会有打印输出
小程序
小程序
真正解决问题:在列表输出的倒计时,快速切换导航条的时候解决倒计时异常问题,通过数组
以下代码为部分重要代码

  data: {    timerArr:[],//存储倒计时  },// 获取订单信息 getOrderList: function (){    const me = this    // 清除当前timerArr所有元素的倒计时    me.data.timerArr.forEach(function(item,index){      clearInterval(item);       })     // 请求数据     app.xAjax({      callBack: function (res) {        const orderList = res.data.data;        me.setData({          orderList: orderList        })        // 遍历输出倒计时        orderList.forEach(function(item, index){               // 倒计时timer              var timer = setInterval(function(){                if (countDown0){                  if (countDown60){                    var countDownStr = Math.floor(countDown / 60) + '分' + (countDown % 60) + '秒'                  } else {                    var countDownStr =countDown + '秒'                  }                  countDown--;                  item.countDownStr = '支付倒计时:' + countDownStr;                } else {                  item.countDownStr = '';                   // 倒计时结束清除倒计时                  clearInterval(timer);                               }              },1000)                            var arr = me.data.timerArr              arr.push(timer)  // 将未清除的倒计时存入arr              me.setData({// 存储timerArr                timerArr:arr              })            }          }        })      },    })        }// 点击切换导航条的时候  bindChangeList(e){    const me = this      // 清空倒计时    me.data.timerArr.forEach(function (item, index) {      clearInterval(item);    })     me.setData({//timerArr设置为空数组      timerArr:[]    })  },  //取消订单    cancelOrder(options) {    let me = this;    me.setData({      isAlertHIdden: false,      alertText: '确认取消此订单?',      alertType: 'cancel',      orderId: options.currentTarget.dataset.orderid,      status: options.currentTarget.dataset.status    })    //清除定时器    me.data.timerArr.forEach(function (item, index) {      clearInterval(item);    })  },

订单列表倒计时通常需要清除定时器的地方:切换导航条,取消订单,数据请求之前

版权声明

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

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

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