Vue implémente le chronométrage/compte à rebours du jeu

Exigences : obtenez l'heure de début et l'heure de fin du jeu. (La course compte !!)

(1) Si ce n'est pas l'heure de début du jeu, il affichera 00:00:00.

(2) S'il s'agit de l'heure de début mais pas de l'heure de fin, le temps écoulé depuis l'heure de début s'affichera.

(3) Si l'heure de fin est dépassée, le temps total s'affichera, c'est-à-dire l'heure de fin du jeu moins l'heure de début.

     isBeforeStart : le jeu n'a pas encore commencé isOver le jeu est terminé

        <p>比赛用时</p>
        <p class="match-time" v-if="isBeforeStart">00:00:00</p>
        <p class="match-time" v-else-if="isOver">{
   
   { formatTime(totalTime) }}</p>
        <p class="match-time" v-else>{
   
   { formatTime(useTime) }}</p>

défini dans les données

data(){
  return{
    startTime: '2023-04-13 20:33:22',//比赛开始时间
    endTime: '2023-04-14 21:33:22',//比赛结束时间
    useTime: '', // 倒计时
    timerMatch: null //计时器
  }
},
mounted(){
  this.getTime()
},
beforeDestroy () {
  this.timerMatch = null  //销毁计时器,避免内存泄露
},
computed: {  //计算属性
  isBeforeStart () {
    return new Date() < this.startTime
  },
  isOver () {
    return new Date() > this.endTime
  },
  totalTime () {
    return Math.floor((new Date(this.endTime) - new Date(this.startTime)) / 1000)
  }
},
methods:{
  getTime(){ 
   //......一般是接口返回比赛时间,自己的逻辑自行修改......
    this.startTime = new Date(this.startTime)
    this.endTime = new Date(this.endTime)
    this.useTime = Math.floor((new Date() - this.startTime) / 1000)
    this.timerMatch = setInterval(() => {
      this.useTime = Math.floor((new Date() - this.startTime) / 1000)
         if (new Date() >= this.endTime) {
           clearInterval(this.timerMatch)
          }
      }, 1000)
  }
}

Compte à rebours du jeu : si l'exigence est un compte à rebours du jeu, il peut être calculé en modifiant startTime en endTime selon la logique correspondante.

Je suppose que tu aimes

Origine blog.csdn.net/enhenglhm/article/details/130316906
conseillé
Classement