Vue倒计时详解

Vue倒计时是一个常见的需求,可用于各类业务场景中,如秒杀活动,订单支付限时等。在Vue中,我们可以通过一些简单的方法实现倒计时功能,本文将从多个方面详细介绍Vue倒计时的相关知识。

一、Vue倒计时怎么做

Vue倒计时可以使用Vue.js提供的计时器方法,通过setInterval()和clearInterval()实现倒计时效果。我们需要将计时器方法封装成一个组件,在组件中可以通过props接收父组件传入的倒计时时间,实现倒计时效果。以下是一个简单的Vue倒计时组件实现:


<template>
  <div>
    {{ time }}
  </div>
</template>

<script>
export default {
  props: {
    totalTime: {
      type: Number,
      required: true
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      const tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(tid)
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

二、Vue倒计时结束自动加载数据

在某些业务场景中,倒计时结束后需要自动加载数据,那么我们可以在Vue倒计时组件中加入回调函数,在计时结束的时候执行回调函数即可。以下是一个示例:


<template>
  <div>
    {{ time }}
  </div>
</template>

<script>
export default {
  props: {
    totalTime: {
      type: Number,
      required: true
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      const tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

三、Vue倒计时组件

为了方便多次使用,我们可以将Vue倒计时组件封装成一个单独的组件,供其他组件进行引用。在该组件中,我们可以提供一些预设的属性和方法,如总时间,回调函数等。以下是一个Vue倒计时组件的示例:


<template>
  <div class="countdown">
    {{ time }}
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    totalTime: {
      type: Number,
      required: true,
      default: 60
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      const tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

四、Vue倒计时5秒

如果我们需要实现一个5秒倒计时,代码实现非常简单,只需要将Vue倒计时组件中的totalTime属性设置为5即可。以下是一个示例:


<template>
  <div class="countdown">
    {{ time }}
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    totalTime: {
      type: Number,
      required: true,
      default: 5
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      const tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

五、Vue倒计时60秒

同样的,如果我们需要实现一个60秒倒计时,只需要将Vue倒计时组件中的totalTime属性设置为60即可。以下是一个示例:


<template>
  <div class="countdown">
    {{ time }}
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    totalTime: {
      type: Number,
      required: true,
      default: 60
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      const tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

六、Vue倒计时功能

在倒计时过程中,我们可能需要实现一些特殊的功能,如暂停和继续,重新开始等。以下是一个带有暂停和继续功能的Vue倒计时组件:


<template>
  <div class="countdown">
    {{ time }} {{ status }}
    <button @click="pause">暂停</button>
    <button @click="resume">继续</button>
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    totalTime: {
      type: Number,
      required: true,
      default: 60
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: '',
      status: '进行中',
      tid: null
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      this.tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(this.tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    },
    pause () {
      clearInterval(this.tid)
      this.status = '已暂停'
    },
    resume () {
      this.countDown()
      this.status = '进行中'
    }
  }
}
</script>

七、Vue倒计时方法

除了使用计时器的方法进行倒计时之外,Vue提供了一些其他的方法,如watch和computed。我们可以通过这些方法轻松的实现倒计时效果。以下是一个使用watch方法实现的Vue倒计时组件:


<template>
  <div class="countdown">
    {{ time }}
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    leftTime: {
      type: Number,
      required: true
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  watch: {
    leftTime (newVal) {
      clearInterval(this.tid)
      this.countDown()
    }
  },
  methods: {
    countDown () {
      let time = this.leftTime
      this.tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(this.tid)
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    }
  }
}
</script>

八、Vue倒计时取消

在某些业务场景中,我们可能需要在倒计时进行的过程中取消倒计时,我们可以在Vue倒计时组件中加入取消方法。以下是一个Vue倒计时组件的示例:


<template>
  <div class="countdown">
    {{ time }}
    <button @click="cancel">取消</button>
  </div>
</template>

<script>
export default {
  name: 'Countdown',
  props: {
    totalTime: {
      type: Number,
      required: true,
      default: 60
    },
    callback: {
      type: Function,
      required: false
    }
  },
  data () {
    return {
      time: ''
    }
  },
  created () {
    this.countDown()
  },
  methods: {
    countDown () {
      let time = this.totalTime
      this.tid = setInterval(() => {
        if (time > 0) {
          time --
          this.time = this.formatTime(time)
        } else {
          clearInterval(this.tid)
          if (this.callback) {
            this.callback()
          }
        }
      }, 1000)
    },
    formatTime (time) {
      const minute = Math.floor(time / 60)
      const second = time % 60
      return `${minute < 10 ? '0' + minute : minute}:${second < 10 ? '0' + second : second}`
    },
    cancel () {
      clearInterval(this.tid)
      // 如果还有其他回调,也可以在这里执行
    }
  }
}
</script>

九、Vue倒计时按钮组件

在许多业务

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/257823.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:47
下一篇 2024-12-15 12:47

相关推荐

  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • Vue3的vue-resource使用教程

    本文将从以下几个方面详细阐述Vue3如何使用vue-resource。 一、安装Vue3和vue-resource 在使用vue-resource前,我们需要先安装Vue3和vue…

    编程 2025-04-27
  • ThinkPHP6 + Vue.js: 不使用Fetch的数据请求方法

    本文将介绍如何在ThinkPHP6和Vue.js中进行数据请求,同时避免使用Fetch函数。 一、AJAX:XMLHttpRequest的基础使用 在进行数据请求时,最基础的方式就…

    编程 2025-04-27
  • Vue模拟按键按下

    本文将从以下几个方面对Vue模拟按键按下进行详细阐述: 一、Vue 模拟按键按下的场景 在前端开发中,我们常常需要模拟按键按下的场景,比如在表单中填写内容后,按下“回车键”提交表单…

    编程 2025-04-27
  • 开发前端程序,Vue是否足够?

    Vue是一个轻量级,高效,渐进式的JavaScript框架,用于构建Web界面。开发人员可以使用Vue轻松完成前端编程,开发响应式应用程序。然而,当涉及到需要更大的生态系统,或利用…

    编程 2025-04-27
  • 如何在Vue中点击清除SetInterval

    在Vue中点击清除SetInterval是常见的需求之一。本文将介绍如何在Vue中进行这个操作。 一、使用setInterval和clearInterval 在Vue中,使用set…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25

发表回复

登录后才能评论