js实现仿淘宝抢购倒计时

思路分析:

通过开始时间和结束时间可计算出剩余时间(转化成时间戳,得到时分秒,并精确到毫秒),
放弃使用setinterval有一定的误差, 使用requestAnimationFrame实现匿名函数自执行来达到倒计时的效果

优化:

  1. 在结束时使用cancelAnimationFrame取消动画帧
  2. 当时分秒为一位数的时候,前面补0,避免出现时间长短不一致的效果,影响视觉。

贴代码

    function formatTime(ms) {
      ms = new Date("2018/8/8 14:20:00").getTime() - Date.now();
      if(ms <= 0){
        document.getElementById("showTime").innerHTML = '已结束'
        window.cancelAnimationFrame(animate);
        return ;
      }
      var ss = 1000;
      var mi = ss * 60;
      var hh = mi * 60;
      var dd = hh * 24;

      var day = parseInt(ms / dd);
      var hour = parseInt((ms - day * dd) / hh);
      var minute = parseInt((ms - day * dd - hour * hh) / mi);
      var second = parseInt((ms - day * dd - hour * hh - minute * mi) / ss);
      var milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;

      let sb = '';
      if (day >= 0) {
        sb += day + "天"
      }
      if (hour >= 0) {
        /* if(hour >= 0 && hour <= 9){
          sb = sb + '0' + hour + ":"
        }else{
          sb += hour + ":" 
        } */
        sb = hour > 9 ? sb + hour + ":" : sb + '0' + hour + ":"
      }
      if (minute >= 0) {
        sb = minute > 9 ? sb + minute + ":" : sb + '0' + minute + ":"
      }
      if (second >= 0) {
        sb = second > 9 ? sb + second + ":" : sb + '0' + second + ":"
      }
      if (milliSecond >= 0) {
        sb += parseInt(milliSecond / 100)
      }
      document.getElementById("showTime").innerHTML = '距结束' + sb
      animate = window.requestAnimationFrame(formatTime);
    }
    // window.requestAnimationFrame(formatTime)
    var animate;
    formatTime();

定时器的使用参考文章 链接

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • http://www.cnblogs.com/chaogex/p/3960175.html 前言 本文主要参考w3...
    流动码文阅读 4,318评论 0 2
  • 原文地址:原生JavaScript中动画与特效的实现原理 转载请注明出处 现如今,许多页面上均有一些动画效果。适当...
    xiaoxiao昱阅读 8,349评论 0 10
  • 从JS执行机制说起 浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行...
    love2013阅读 4,410评论 0 1
  • (一) 从来不知道你也会有离开我的一天,虽然你生病有一段时间,我一直认为我崇拜...
    袁睿男阅读 3,590评论 0 2
  • 老太太的棉袄开始出汗 树丫上的鸟儿叫不出声 当云有些春心萌动 衣袂便开始偷抛媚眼 雷电捅破一层窗户纸 万物索性疯狂...
    小知识阶层阅读 1,436评论 0 2

友情链接更多精彩内容