vue实现列表倒计时

yizhihongxing

想要实现列表倒计时,可以使用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日

相关文章

  • Vue2响应式系统介绍

    Vue2响应式系统介绍 Vue2的响应式系统是Vue2核心功能之一,它是通过数据劫持和依赖收集来实现的。这种实现方式使得我们不需要手动去操作DOM,只需要操作数据就可以达到更新页面的目的。下面我将详细介绍Vue2响应式系统的实现原理和使用方法。 数据劫持 Vue2的响应式系统是通过数据劫持来实现的。当我们改变Vue实例中的某个数据时,Vue2会自动检测到这个…

    Vue 2023年5月28日
    00
  • vuex操作state对象的实例代码

    下面是详细讲解“Vuex操作state对象的实例代码”的攻略。 1. 理解Vuex和state对象的基本概念 Vuex是一个专门为Vue.js设计的状态管理库,主要用于管理Vue.js应用程序中的状态。在使用Vuex的过程中,最核心的概念就是state对象。 state对象是Vuex中的一个重要部分,它类似于Vue.js组件中的data对象,但是它被所有组件…

    Vue 2023年5月28日
    00
  • Vue2.X 通过AJAX动态更新数据

    当使用 Vue2.X 开发Web应用时,会经常需要通过AJAX动态获取数据并更新页面。以下是一个完整攻略,演示如何在 Vue2.X 中通过AJAX动态更新数据。 1. 安装 axios 在 Vue2.X 中,可以使用 axios 库来进行 AJAX 请求。在使用之前需要先进行安装。可以通过以下命令来进行安装: $ npm install axios –sa…

    Vue 2023年5月29日
    00
  • vue路由切换之淡入淡出的简单实现

    下面是“vue路由切换之淡入淡出的简单实现”的完整攻略: 一、背景介绍 在web应用程序中,经常需要通过路由来实现页面切换,给用户带来更好的交互体验。而在路由切换时,淡入淡出效果通常能使用户感觉更加温和,增强用户体验。 本文主要介绍如何在vue项目中实现路由切换时的淡入淡出效果。 二、基本思路及方法 要实现vue路由切换时的淡入淡出效果,基本思路是通过CSS…

    Vue 2023年5月27日
    00
  • Vue实现页面添加水印功能

    下面我来详细讲解一下“Vue实现页面添加水印功能”的完整攻略。 步骤一:安装依赖 首先需要安装一个npm包,名为watermark-dom,这个包可以用来在DOM元素上添加水印。通过以下命令安装: npm install watermark-dom –save 步骤二:创建组件 接下来需要创建一个组件,可以称之为Watermark,表示页面上添加水印的区域…

    Vue 2023年5月28日
    00
  • 一文教会你如何搭建vue+springboot项目

    一文教会你如何搭建Vue + Spring Boot 项目 本文将详细讲解如何使用Vue.js和Spring Boot搭建一个全栈Web应用程序。我们将从创建项目开始,一步步地进行讲解,涵盖前端和后端两个方面,最终将两者结合起来,搭建完成一个完整的应用程序。 准备工作 在开始之前,确保您已经安装了以下工具或软件: 最新的Node.js 最新的Java JDK…

    Vue 2023年5月28日
    00
  • Vue.js之render函数使用详解

    下面是关于Vue.js之render函数使用的详解攻略: 什么是render函数 Render函数是Vue.js中的一项核心特性,它允许您使用JavaScript编写模板,这意味着你可以获得更多的控制和更灵活的方式来编写您的组件。 render函数的写法 在Vue.js中,Render函数使用一个函数来定义组件的渲染输出。这个函数包含一个参数——h,它是Vu…

    Vue 2023年5月28日
    00
  • 解决vue.js提交数组时出现数组下标的问题

    当使用Vue.js提交表单数据数组时,会出现一个常见的问题,即无法获取到数组的下标,导致后台无法正确处理提交的数据。解决这个问题的方法很简单,本文将提供一些完整的攻略,帮助您解决这个问题。 问题分析 接下来的代码创建了一个表单,其中包含了一个可变长度的input数组。我们尝试提交这个表单,并触发表单提交事件: <form @submit.prevent…

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