Vue实现倒计时小功能

Vue实现倒计时小功能的完整攻略

在Vue中实现倒计时小功能需要以下几个步骤:

  1. 引入Vue组件和相关依赖:首先我们需要在标签中引入Vue.js的相关文件。
<head>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
  1. 实现倒计时逻辑:我们可以在Vue实例中定义一个计时器,并在计时器回调中实现倒计时逻辑。
new Vue({
  el: '#app',
  data: {
    remainingTime: '00:00:00'
  },
  created() {
    setInterval(() => {
      const targetTime = new Date('2021-12-31 23:59:59');
      const currentTime = new Date();
      const remainingTime = targetTime - currentTime;
      const hours = Math.floor((remainingTime / 3600000) % 24);
      const minutes = Math.floor((remainingTime / 60000) % 60);
      const seconds = Math.floor((remainingTime / 1000) % 60);
      this.remainingTime = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`
    }, 1000)
  }
})

在以上代码中,我们定义了一个Vue实例,并在created生命周期中使用setInterval函数来定义计时器,每隔1秒钟计算一次倒计时并更新remainingTime属性,使得组件随着时间的变化而动态更新。

  1. 在模板中渲染计时器:最后我们需要在模板中将计时器的状态进行渲染。
<div id="app">
  <p>距离2022年元旦还有:</p>
  <h1>{{ remainingTime }}</h1>
</div>

在以上代码中,我们定义了一个<h1>标签来显示剩余时间。

示例1:实现一个倒计时按钮

除了在模板中直接展示倒计时,我们还可以实现一个倒计时按钮,在点击按钮后开始倒计时。以下是示例代码:

<template>
  <div>
    <button @click="startCountdown">开始倒计时</button>
    <p v-if="remainingTime">剩余时间:{{ remainingTime }}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        remainingTime: '',
        timerId: null
      };
    },
    computed: {
      isCountingDown() {
        return this.remainingTime !== '';
      }
    },
    methods: {
      startCountdown() {
        const targetTime = new Date('2021-12-31 23:59:59');
        const currentTime = new Date();
        const remainingTime = targetTime - currentTime;
        const countDown = () => {
          const remainingTime = targetTime - new Date();
          if (remainingTime <= 0) {
            clearInterval(this.timerId);
            this.remainingTime = '';
            return;
          }
          const hours = Math.floor((remainingTime / 3600000) % 24);
          const minutes = Math.floor((remainingTime / 60000) % 60);
          const seconds = Math.floor((remainingTime / 1000) % 60);
          this.remainingTime = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
        };
        countDown();
        this.timerId = setInterval(countDown, 1000);
      }
    }
  };
</script>

在以上代码中,我们实现了一个<button>标签,在点击后开始倒计时。点击按钮后,我们定义了一个countDown函数来计算剩余时间,并使用setInterval函数来定义计时器,每隔1秒钟调用一次countDown函数,更新剩余时间。当倒计时结束后,我们清除计时器并将剩余时间设为空。

示例2:实现一个可自定义目标日期的倒计时组件

除了预先设置好目标日期,我们还可以实现一个带有自定义选项的倒计时组件。以下是示例代码:

<template>
  <div>
    <label>目标日期:</label>
    <input type="datetime-local" v-model="targetDate" @change="startCountdown" />
    <p v-if="remainingTime">剩余时间:{{ remainingTime }}</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        targetDate: '',
        remainingTime: '',
        timerId: null
      };
    },
    methods: {
      startCountdown() {
        const targetTime = new Date(this.targetDate);
        const countDown = () => {
          const remainingTime = targetTime - new Date();
          if (remainingTime <= 0) {
            clearInterval(this.timerId);
            this.remainingTime = '';
            return;
          }
          const hours = Math.floor((remainingTime / 3600000) % 24);
          const minutes = Math.floor((remainingTime / 60000) % 60);
          const seconds = Math.floor((remainingTime / 1000) % 60);
          this.remainingTime = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
        };
        countDown();
        this.timerId = setInterval(countDown, 1000);
      }
    }
  };
</script>

在以上代码中,我们定义了一个可自定义targetDate的倒计时组件。我们使用了<input>标签来让用户通过选择日期来设定目标日期,并使用@change事件来监听用户的选择。在用户选择后,我们根据选定日期计算剩余时间,并使用setInterval函数来定义计时器。每秒钟,我们更新剩余时间,当倒计时结束后,我们清除计时器并将剩余时间设为空。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue实现倒计时小功能 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • 详解vue渲染函数render的使用

    详解Vue渲染函数render的使用 简介 Vue提供了一个名为render的函数来代替模板语法,可以构建出与模板完全等效的虚拟DOM树。如同模板一样,render函数接受createElement函数作为第一个参数来创建虚拟DOM。但相比之下,render函数有更多的灵活性,也更加适合复杂的场景。 本篇攻略将详细讲解Vue渲染函数render及其使用方法,…

    Vue 2023年5月28日
    00
  • Vue中动态class的多种写法

    当我们在Vue中需要动态地给元素添加或切换class时,可以使用以下多种写法: 1. 对象语法 使用对象语法可以动态地添加或删除多个class。 示例代码: <template> <div v-bind:class="{ activated: isActive, ‘text-danger’: hasError }"&gt…

    Vue 2023年5月27日
    00
  • vue使用websocket的方法实例分析

    Vue使用WebSocket的方法实例分析 WebSocket是一种在单个TCP连接上进行全双工通信的协议。Vue.js是一个流行的JavaScript框架,常用于前端开发。在Vue中使用WebSocket可以实现实时更新数据等功能。本文将详细讲解在Vue中使用WebSocket的方法实例分析。 前置要求 在使用WebSocket之前,需要确保以下内容: 安…

    Vue 2023年5月28日
    00
  • Vue中fragment.js使用方法详解

    Vue中fragment.js使用方法详解 在前端开发中,我们经常需要在一个组件内部返回多个连续节点,并将它们包装在一个 DOM 元素中。在 Vue 中,我们可以使用 Fragment 实现这一操作。但是在 Vue 2.x 中,Fragment API 并没有提供支持,为了解决这个问题,我们可以使用 fragment.js 这个第三方库来帮助我们使用 Fra…

    Vue 2023年5月27日
    00
  • vue-electron中修改表格内容并修改样式

    要在Vue-Electron中修改表格内容并修改样式,我们可以使用以下步骤: 为表格创建数据源 在Vue-Electron中,我们通常使用vuex来管理数据。我们可以在vuex状态管理器中创建一个数组,该数组作为表格的数据源。以下是一个示例代码片段: const state = { tableData: [ { name: ‘John’, status: ‘…

    Vue 2023年5月29日
    00
  • Vue-cli配置打包文件本地使用的教程图解

    下面我为大家详细讲解“Vue-cli配置打包文件本地使用的教程图解”的完整攻略。 一、前置知识 在介绍如何配置Vue-cli打包文件本地使用前,我们需要先了解以下几个概念: Vue-cli:Vue-cli是Vue.js官方提供的一个脚手架工具,通过Vue-cli快速生成Vue项目目录结构和配置,并支持开箱即用的webpack构建工具。 webpack:web…

    Vue 2023年5月28日
    00
  • Vue中data数据初始化方法详解

    下面是关于“Vue中data数据初始化方法详解”的完整攻略。 Vue中data数据初始化方法详解 Vue中data初识 在Vue中,我们经常会使用data属性来存储组件中的数据,在组件创建时会把data中定义的数据预先初始化。 Vue.component(‘example’, { data() { return { foo: ‘bar’ } } }) 在这个…

    Vue 2023年5月28日
    00
  • axios中post请求json和application/x-www-form-urlencoded详解

    Axios中POST请求JSON和application/x-www-form-urlencoded详解 什么是POST请求? POST请求是HTTP协议中的一种请求方式,在请求体中携带需要传输的数据。可能被用于编辑、更新、上传等操作。POST请求方式相对于GET请求方式来说,更加安全和灵活,所以在实际开发中被广泛使用。 axios中POST请求的两种方式 …

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部