Use momentJs to make a countdown component (example code)

Use momentJs to make a countdown component (example code)

Today I'd like to introduce a countdown made by vue and moment. The specific content is as follows:

Display style:

<template>
    <div class="table-right flex-a-center">
        <div class="time-text">
            <span class="timeTextSpan" v-for="item,index of h" >{{item}}</span>
            <span class="timeTextSpan1" >: </span>
            <span class="timeTextSpan" v-for="item,index of m" >{{item}}</span>
            <span class="timeTextSpan1" >: </span>
            <span class="timeTextSpan" v-for="item,index of s" >{{item}}</span>
        </div>
    </div>
</template>
<script>
import moment from 'moment'
export default {
  props: {
    endTime: { }, //Last received time 2021-12-17 16:29:20
  },
  data() {
    //Store data here return {
      h:'00',
      m:'00',
      s:'00',
      timer:null
    };
  },
  watch:
    endTime: {
      handler(e) {
        if (e) {
          let self = this
          clearInterval(this.timer)
          this.timer = setInterval(function(){self.init()},1000)
        }
      },
      deep: true,
      immediate: true
    }
  },
  mounted() {
    let self = this
    self.init()
    clearInterval(this.timer)
    this.timer = setInterval(function(){self.init()},1000)
  },
  //Method collection methods: {
    init(){
        let time = moment(this.endTime).diff(moment())
        if(time <= 0){
          clearInterval(this.timer)
          this.onOver()
          return
        }
        let t = time / 1000;
        let d = Math.floor(t / (24 * 3600)); //Remaining days, you can make up for it if necessary let h = Math.floor((t - 24 * 3600 * d) / 3600) + d*24; //No days needed, convert days into hours let _h = Math.floor((t - 24 * 3600 * d) / 3600) //Keep the days and get the hours let m = Math.floor((t - 24 * 3600 * d - _h * 3600) / 60);
        let s = Math.floor((t - 24 * 3600 * d - _h * 3600 - m * 60));
       
        this.h = String(h).length == 1? '0'+String(h):String(h)
        this.m = String(m).length == 1? '0'+String(m):String(m)
        this.s = String(s).length == 1? '0'+String(s):String(s)
    },
    onOver() {
      this.$emit('over') //Callback when countdown ends}
 
  },
  beforeDestroy(){
    this.timer = null
    clearInterval(this.timer)
  }
}
</script>
<style lang='less' scoped>
@import url("@/assets/css/supplier.less");
 

  .table-right {
    font-size: 12px;
    color: #757e8a;
    .timeTextSpan{
      display: inline-block;
      width: 14px;
      height: 22px;
      text-align: center;
      background: #F1F0F0;
      border-radius: 2px;
      margin-right: 2px;
      font-size: 16px;
      color: #ff8a2b;
      font-weight: bold;
    }
    .timeTextSpan1{
      display: inline-block;
      width: 14px;
      text-align: center;
      vertical-align: bottom;
      color:#202D40;
      font-size: 16px;
      font-weight: bold;
    }
   
    .time-text {
      margin-left: 10px;
    }
  }
</style>

This is the end of this article about using momentJs to make a countdown component. For more related momentJs countdown component content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Vue implements CLI 3.0 + momentjs + lodash packaging optimization

<<:  Detailed explanation of the frame and rules attributes of the table in HTML

>>:  Advantages and disadvantages of Table layout and why it is not recommended

Recommend

Solution to using html2canvas to process Dom elements with Baidu map into images

Problem 1: Baidu Map uses tiled images (the map i...

Common JavaScript memory errors and solutions

Table of contents 1. Timer monitoring 2. Event mo...

Sharing the structure and expression principles of simple web page layout

Introduction to structure and performance HTML st...

How to configure Linux CentOS to run scripts regularly

Many times we want the server to run a script reg...

Example of how to import nginx logs into elasticsearch

The nginx logs are collected by filebeat and pass...

MySQL 8.0.12 installation and configuration method graphic tutorial

Record the installation and configuration method ...

Navicat remote connection to MySQL implementation steps analysis

Preface I believe that everyone has been developi...

The most commonly used HTML tags to create web pages

1. Optimization of commonly used HTML tags HTML s...

Detailed tutorial on installing and configuring MySQL 5.7.20 under Centos7

1. Download the MySQL 5.7 installation package fr...

How to use selenium+testng to realize web automation in docker

Preface After a long time of reading various mate...

Super detailed steps to install zabbix3.0 on centos7

Preface Recently, part of the company's busin...