ios、安卓手机锁屏或页面隐藏时,setTimeout定时器倒计时不执行,解锁显示后才执行的问题

柔情痞子 提交于 2020-02-12 12:40:13

手机锁屏后,h5浏览器setTimeout暂停执行了,发送验证码的秒数或倒计时没有继续往下走,遇到这种问题可以用visibilitychange这种方式处理

// 监听页面隐藏(锁屏)或后台执行时,解决定时器不执行的问题
    addVisibilitychange(){
      let that = this;
      let start,end,vibS,newS;
      document.addEventListener('visibilitychange',function(){
        // hidden 为锁屏隐藏状态,visible为重新显示状态
        if(document.visibilityState === 'hidden'){
          start = new Date().getTime();
          that.newTimeStatus = false; // 解决显示页面时会先显示旧秒数,一会才显示新秒数的问题
        } else if(document.visibilityState === 'visible'){
          end = new Date().getTime();
          // vibS为锁屏间隔的时间(秒),timer为定时器锁屏前显示的秒数
          vibS = Math.floor((parseInt(end) - parseInt(start))/1000)
          newS = parseInt(that.timer) - vibS
          if(newS >0){
            // 重新赋值,间隔后的新的定时器时间
            that.timer = newS
            setTimeout(()=>{
              that.newTimeStatus = true;  // 解决显示页面时会先显示旧秒数,一会才显示新秒数的问题
            },400);
          } else {
            // 已经超出范围,则默认秒数已经读完,恢复原来时间,显示重发验证码文案
            that.timerShow = false;
            that.timer = 120;
          }
        }
      });
    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!