vue实现列表倒计时

想要实现列表倒计时,可以使用Vue框架中的定时器方法和计算属性来实现。具体实现的过程如下:

步骤一:在App.vue文件中创建数据

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.name }}:{{ item.countdown }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: '商品一', expire: 1639240800000 },
        { name: '商品二', expire: 1639327200000 },
        { name: '商品三', expire: 1639413600000 },
      ],
    };
  },
};
</script>

步骤二:在计算属性中计算倒计时剩余时间

下一步,我们需要在计算属性中计算倒计时剩余时间。我们可以使用Vue提供的计算属性computed来进行计算,计算属性的值会在响应式依赖发生改变时自动重新计算。

通过计算商品的到期时间和当前时间的时间差,来计算出商品的倒计时。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.name }}:{{ countdown(item) }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: '商品一', expire: 1639240800000 },
        { name: '商品二', expire: 1639327200000 },
        { name: '商品三', expire: 1639413600000 },
      ],
    };
  },
  computed: {
    countdown(item) {
      const now = new Date();
      const expire = new Date(item.expire);
      const seconds = Math.floor((expire.getTime() - now.getTime()) / 1000);
      const minutes = Math.floor(seconds / 60);
      const hours = Math.floor(minutes / 60);
      const days = Math.floor(hours / 24);
      const countdownString = `${days}天${hours % 24}小时${minutes % 60}分钟${seconds % 60}秒`;
      return countdownString;
    },
  },
};
</script>

在这个例子中,我们为计算属性countdown传入了一个参数item,这个参数对应了当前正在遍历的商品对象。在计算属性的计算过程中,我们获取了商品到期时间和当前时间,计算出了剩余的时间,并返回了一个包含天、时、分、秒的字符串。

示例一:显示固定格式的倒计时

有时候我们需要显示固定格式的倒计时,比如只显示时分秒,我们可以在计算属性中指定固定格式。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.name }}:{{ countdown(item, 'hh:mm:ss') }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: '商品一', expire: 1639240800000 },
        { name: '商品二', expire: 1639327200000 },
        { name: '商品三', expire: 1639413600000 },
      ],
    };
  },
  computed: {
    countdown(item) {
      // ...
      const countdownString = `${hours.toString().padStart(2, '0')}:${minutes
        .toString()
        .padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
      return countdownString;
    },
  },
};
</script>

在这个示例中,我们在countdown函数中新增了一个参数format,用来指定倒计时的显示格式。我们通过padStart方法给小时、分钟、秒数补0,保证了他们的长度为2,防止显示出错。

示例二:在定时器中更新倒计时

默认情况下,计算属性在每一次读取时都会重新计算一次。但是在列表中,如果有多个倒计时一起运行时,计算属性的计算会显得非常消耗时间。

更好的方法是将计时器存储在数据中,然后在定时器中更新剩余时间,同时也更新计时器状态。

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.name }}:{{ item.countdown }}
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: '商品一', expire: 1639240800000, countdown: '' },
        { name: '商品二', expire: 1639327200000, countdown: '' },
        { name: '商品三', expire: 1639413600000, countdown: '' },
      ],
    };
  },
  created() {
    setInterval(() => {
      this.updateCountdown();
    }, 1000);
  },
  methods: {
    updateCountdown() {
      const now = new Date();
      this.items = this.items.map(item => {
        const expire = new Date(item.expire);
        const seconds = Math.floor((expire.getTime() - now.getTime()) / 1000);
        const minutes = Math.floor(seconds / 60);
        const hours = Math.floor(minutes / 60);
        const days = Math.floor(hours / 24);
        const countdownString = `${days}天${hours % 24}小时${minutes % 60}分钟${seconds % 60}秒`;
        item.countdown = countdownString;
        return item;
      });
    },
  },
};
</script>

在这个示例中,我们在数据中新增了一个countdown字段,用来存储倒计时。在created生命周期钩子函数中,我们使用setInterval定时器定时每秒钟调用一次updateCountdown方法,这个方法会使用当前时间和到期时间计算出剩余时间,并更新商品的countdown字段。

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

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

相关文章

  • 一篇文章总结Vue3.2语法糖使用

    一篇文章总结Vue3.2语法糖使用 简介 Vue.js是一款流行的前端JavaScript框架,而Vue 3是其最新版本,其中引入了一些方便开发的新特性,即语法糖。本篇文章将讲解Vue3.2语法糖的使用方法。 defineComponent函数 在Vue3中,我们可以使用defineComponent函数定义组件,它可以让代码更加简洁明了。下面是一个使用de…

    Vue 2023年5月27日
    00
  • vue开发中数据更新但视图不刷新的解决方法

    当我们在Vue开发中使用数据绑定时,有时候会遇到数据更新了但视图没有及时刷新的情况,这往往是因为Vue的响应式系统没有及时捕捉到数据的变化。下面我将为您介绍几种解决方案。 1. 使用Vue.set或this.$set强制数据响应式更新 Vue2.0之后提供了Vue.set或this.$set方法,可以用来更新数据并强制响应式系统重新渲染视图。我们可以使用这个…

    Vue 2023年5月29日
    00
  • vue3组合式api实现v-lazy图片懒加载的方法实例

    下面我来详细讲解一下“vue3组合式api实现v-lazy图片懒加载的方法实例”的完整攻略。 1. 初步了解Vue3中的组合式API 在Vue3中,使用组合式API可以更加灵活地组织逻辑代码,将逻辑代码与UI组件的逻辑分离,使得组件更加清晰、易于维护。组合式API中重要的概念有:响应式数据、ref、reactive、setup等。 在使用组合式API时,需要…

    Vue 2023年5月28日
    00
  • 基于vue如何发布一个npm包的方法步骤

    发布一个基于 vue 的 npm 包的步骤,可以分为以下几个步骤: 1. 初始化 npm 包 npm init 按照提示依次输入各个信息,最后生成 package.json 文件。 2. 创建 vue 组件 这里以一个 Button 组件为例: <template> <button :class="classObject&quot…

    Vue 2023年5月28日
    00
  • 前端实时通信的8种方式及其优缺点和实现方式

    前端实时通信的8种方式及其优缺点和实现方式 前端实时通信是目前前端开发中常见的需求之一,常用于在线聊天、游戏、协作、数据实时更新等场景中,下面将对前端实时通信的8种方式进行详细讲解。 方式一:Ajax轮询 优点 兼容性好,支持大部分浏览器。 能够实时获取后端数据。 缺点 客户端会不断向服务器发送请求,增大服务器压力。 不是真正意义上的实时通信。 实现方式 f…

    Vue 2023年5月28日
    00
  • Vue路由router详解

    Vue路由router详解 什么是路由 路由指的是根据不同的URL地址展示不同的页面内容,Vue Router是Vue.js官方的路由管理器。使用Vue Router可以很方便地实现单页面应用程序(SPA)中的多视图管理。 安装 安装Vue Router很简单,在Vue CLI中提供了预设的脚手架模板供使用者选择,其中就包括了Vue Router功能。 步骤…

    Vue 2023年5月29日
    00
  • vue结合Axios+v-for列表循环实现网易健康页面(实例代码)

    下面是详细讲解“vue结合Axios+v-for列表循环实现网易健康页面(实例代码)”的完整攻略: 一、环境配置 首先,我们需要在本地环境中安装Vue.js和Axios。可以通过以下命令进行安装: npm install vue axios –save-dev 接下来,在Vue的入口文件中引入Axios: // main.js import Vue fro…

    Vue 2023年5月28日
    00
  • vue中this.$set()的基本用法实例

    关于“vue中this.$set()的基本用法实例”的完整攻略,我来详细介绍。 什么是Vue中的this.$set()? 在Vue中,你可以定义一个响应式的数据对象,这意味着当你修改数据时,你的界面会自动更新。Vue内部使用ES5的Object.defineProperty API来实现这一点。 然而,这个API在对象被创建时就将其所有属性转换为getter…

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