阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Javascript setTimeout 倒计时误差

      问题

      Javascript setTimeout 倒计时误差

      答案

      JS 是单线程的,所以 setTimeout 的误差其实是⽆法被完全解决的,原因有很多,可能是回调中的,有可能是浏览器中的各种事件导致。这也是为什么⻚⾯开久了,定时器会不准的原因,当然我们可以通过⼀定的办法去减少这个误差。

      // 以下是⼀个相对准备的倒计时实现
      var period = 60 * 1000 * 60 * 2
      var startTime = new Date().getTime();
      var count = 0
      var end = new Date().getTime() + period
      var interval = 1000
      var currentInterval = interval
      function loop() {
          count++
          var offset = new Date().getTime() - (startTime + count * interval); // 代码
          var diff = end - new Date().getTime()
          var h = Math.floor(diff / (60 * 1000 * 60))
          var hdiff = diff % (60 * 1000 * 60)
          var m = Math.floor(hdiff / (60 * 1000))
          var mdiff = hdiff % (60 * 1000)
          var s = mdiff / (1000)
          var sCeil = Math.ceil(s)
          var sFloor = Math.floor(s)
          currentInterval = interval - offset // 得到下⼀次循环所消耗的时间
          console.log('时:'+h, '分:'+m, '毫秒:'+s, '秒向上取整:'+sCeil, '代码执⾏时间:
          setTimeout(loop, currentInterval)
      }
      setTimeout(loop, currentInterval)
      

      更多面试题

      如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。

      面试题
      HTMLCSSJavaScript
      jQueryVue.jsReact
      算法HTTPBabel
      BootStrapElectronGulp
      Node.js前端经验相关前端综合
      Webpack微信小程序-

      这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!

      目录
      目录