js实现倒计时

325 阅读2分钟

倒计时

运用时间戳,实现秒杀倒计时,下班倒计时 主要语法 设置截至时间new Date(),获取截至时间到1970年1月1日的的时间戳date.getTime(),获取当前时间到 1970年1月1日的的时间戳Data.now(主要D要大写),定时器语法:开启定时器setInterval() ,关闭定时器clearInterval(timeId)和一些简单的算法。

css样式

 .countdown {
      width: 240px;
      height: 305px;
      text-align: center;
      line-height: 1;
      color: #fff;
      background-color: brown;
      /* background-size: 240px; */
      /* float: left; */
      overflow: hidden;
    }

    .countdown .next {
      font-size: 16px;
      margin: 25px 0 14px;
    }

    .countdown .title {
      font-size: 33px;
    }

    .countdown .tips {
      margin-top: 80px;
      font-size: 23px;
    }

    .countdown small {
      font-size: 17px;
    }

    .countdown .clock {
      width: 142px;
      margin: 18px auto 0;
      overflow: hidden;
    }

    .countdown .clock span,
    .countdown .clock i {
      display: block;
      text-align: center;
      line-height: 34px;
      font-size: 23px;
      float: left;
    }

    .countdown .clock span {
      width: 34px;
      height: 34px;
      border-radius: 2px;
      background-color: #303430;
    }

    .countdown .clock i {
      width: 20px;
      font-style: normal;
    }
  </style>

html样式

 <div class="countdown">
    <p class="next">今天是2022121日</p>
    <p class="title">下班倒计时 </p>
    <p class="clock">
      <span id="hour">00</span>
      <i>:</i>
      <span id="minutes">00</span>
      <i>:</i>
      <span id="scond">00</span>
    </p>
    <p class="tips">
      21:00:00下班
    </p>
  </div>

js获取标签

设置结束时间

let hours = document.querySelector('#hour')
    let minutess = document.querySelector('#minutes')
    let sconds = document.querySelector('#scond')
    //设置时间
    let date = new Date('2022-1-21 21:00:00')
    let num = 0

添加定时器

设置的时间戳减去当前时间戳,计算现在到设置时间的时长,当时间为0时移出定时器 通过计算设置时分秒,输出到页面

 let timeId = setInterval(function () {
      let newData = Date.now()
      //设置时间戳减去当前时间戳,计算现在到设置时间的时长
      num = +parseInt((date.getTime() - newData) / 1000)
      if (num < 0) {
        clearInterval(timeId)
      }
      //时
      let hour = parseInt(num / 3600)
      //补0操作
      hour = hour < 10 ? '0' + hour : hour
      //分
      let minutes = parseInt((num % 3600) / 60)
      minutes = minutes < 10 ? '0' + minutes : minutes
      //秒
      let miao = parseInt((num % 3600) % 60 % 60)
      miao = miao < 10 ? '0' + miao : miao
      hours.innerHTML = hour
      minutess.innerHTML = minutes
      sconds.innerHTML = miao
    }, 1000)

效果如图:

image.png

可能出现的问题:

补0后时间停止会出现0-样式

image.png

解决方法: 退出定时器时把时间戳清0

 if (num < 0) {
        clearInterval(timeId)
        num = 0
      }

image.png