js / vue 實現倒計時


方法一:js實現

html:讀取相應的變量

 

 js:聲明變量,調用定時器前先判斷好是否已經超過時間,如果沒有超過則開始計時器 調用函數,當倒計時到最后一秒時,清除定時器。

計算時分秒的時候要用Math.floor()往下取整,否則容易產生一秒跳兩秒的情況。當達到期限時要清除定時器。

 

 實現效果如圖:

 

 代碼如下:

counted () {
            const endDate = new Date("2021-02-06T19:20:00").getTime()
            const nowDate = new Date().getTime()
            if(endDate > nowDate) {
                this.countdown = setInterval(() => {
                    this.computedCountDown()  
                },1000)  
            } else {
                clearInterval(this.countdown)
                this.countdown = ''
            }
        },
        computedCountDown () {
            const endDate = new Date("2021-02-06T19:20:00").getTime()
            const nowDate = new Date().getTime()
            const leftTime = parseInt((endDate - nowDate) / 1000)
            this.day = Math.floor(leftTime / ( 60 * 60 * 24 )) > 9 ? Math.floor(leftTime / ( 60 * 60 * 24 )) : '0' + Math.floor(leftTime / ( 60 * 60 * 24 ))
            this.hour = Math.floor(leftTime / ( 60 * 60 ) % 24) > 9 ? Math.floor(leftTime / ( 60 * 60 ) % 24) : '0' + Math.floor(leftTime / ( 60 * 60 ) % 24)
            this.minute = Math.floor(leftTime / ( 60 ) % ( 60 )) > 9 ? Math.floor(leftTime / ( 60 ) % ( 60 )) : '0' + Math.floor(leftTime / ( 60 ) % ( 60 ))
            this.seconds = Math.floor(leftTime % ( 60 )) > 9 ? Math.floor(leftTime % ( 60 )) : '0' + Math.floor(leftTime % ( 60 ))
            if (nowDate >= endDate) {
                clearInterval(this.countdown)
                this.countdown = ''
            }
        }

 

方法二:vue實現

html:
 js:

watch監聽器

 

methods:

 

 實現效果如圖;

 

 代碼如下:

created () {
    this.computeLeftTime()
    this.countDown = setInterval(() => {
      this.computeLeftTime()
    }, 1000)
  },
watch: {
    $route: {
      handler: function (value) {
        if (value.params.id) {
          this.computeLeftTime()
          this.countDown = setInterval(() => {
            this.computeLeftTime()
          }, 1000)
        } else {
          clearInterval(this.countDown)
          this.countDown = ''
        }
      },
      deep: true
    },
  }
methods: {
  computeLeftTime () { // 計算倒計時
        const endDate = new Date(new Date(期限時間))
        const nowDate = new Date()
        if (期限時間 && new Date(期限時間) <= new Date()) {
          clearInterval(this.countDown)
          // 更新項目狀態
          this.$emit('reflash')
        } else {
          const totalSeconds = parseInt((endDate - nowDate) / 1000)
          // 天數
          this.leftDay = Math.floor(totalSeconds / (60 * 60 * 24))
          // 取模(余數)
          var modulo = totalSeconds % (60 * 60 * 24)
          // 小時數
          this.leftHour = Math.floor(modulo / (60 * 60)) > 9 ? Math.floor(modulo / (60 * 60)) : '0' + Math.floor(modulo / (60 * 60)).toString()
          modulo = modulo % (60 * 60)
          // 分鍾
          this.leftMinute = Math.floor(modulo / 60) > 9 ? Math.floor(modulo / 60) : '0' + Math.floor(modulo / 60).toString()
          // 秒
          this.leftSecond = modulo % 60 > 9 ? modulo % 60 : '0' + (modulo % 60).toString()
        }
      },
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM