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日

相关文章

  • vue实现垂直无限滑动日历组件

    首先,我们需要明确一下“垂直无限滑动日历组件”的概念。它是一种可以在垂直方向上无限滑动的日历组件,可以根据用户的手势操作,实现不同日期之间的切换,并且在切换时能够保持连续的滑动效果。在这个过程中,我们需要用到Vue框架,并且借助一些第三方工具来实现这个组件。 下面是实现这个组件的详细攻略: 1. 安装必要的第三方库 在Vue中,我们可以使用vue-cli来创…

    Vue 2023年5月29日
    00
  • vue项目首屏加载过慢的一些解决方案

    首屏加载慢是vue项目中常见的问题,以下是一些解决方案。 1. 代码分割 由于Vue的单页面应用,一旦一个组件被请求,整个应用程序将被加载到浏览器中。这就导致了首屏加载速度缓慢的问题。通过代码分割,将应用程序分解成更小的块,可以减少加载时间并改善用户体验。 Vue官方提供了vue/cli脚手架工具,其中webpack已经默认配置好了代码分割。通过动态导入组件…

    Vue 2023年5月29日
    00
  • 简单的vuex 的使用案例笔记

    下面我将为你详细讲解“简单的vuex的使用案例笔记”的完整攻略。 一、什么是Vuex? Vuex是Vue.js的官方状态管理工具,由于Vue.js是一款轻量级的前端框架,因此Vuex可以很好地解决多组件共享状态管理的问题,让我们可以更方便地管理组件之间的通信问题。 二、安装和配置Vuex 1.安装 你可以通过npm或者yarn安装Vuex: npm inst…

    Vue 2023年5月28日
    00
  • vue.js页面加载执行created,mounted的先后顺序说明

    在Vue.js中,组件的生命周期包括如下几个阶段:创建(creation)、挂载(mounting)、更新(updating)和销毁(destroying)。其中,created和mounted属于创建和挂载阶段,下面详细介绍它们执行的先后顺序。 首先,created钩子函数会在组件实例创建之后立即被调用,此时模板还未渲染成html,因此无法访问到DOM元素…

    Vue 2023年5月28日
    00
  • vue,angular,avalon这三种MVVM框架优缺点

    下面是对vue、angular和avalon三种MVVM框架的详细讲解。 Vue 优点 渐进式框架,可以按需引入。 模块化开发,易于管理代码。 简化的模板语法,易于阅读和学习。 响应式数据绑定,可以实时更新视图。 Vuex 状态管理模式,方便管理全局状态。 社区活跃,有大量的第三方组件和插件可以选择。 缺点 学习曲线较陡峭。 不适合用来开发大型复杂的单页面应…

    Vue 2023年5月27日
    00
  • 图文详解vue框架安装步骤

    图文详解Vue框架安装步骤 1. 确认运行环境 在安装Vue框架之前,需要先确认已经安装了node.js,并且其版本号为6以上。 可以通过以下命令来检查node.js的版本: node -v 如果确认已经安装了node.js,那么就可以继续进行后续的操作了。 2. 安装Vue CLI Vue CLI是专门用于Vue开发的脚手架工具,可以快速搭建Vue项目。 …

    Vue 2023年5月28日
    00
  • 脚手架(vue-cli)创建Vue项目的超详细过程记录

    脚手架(vue-cli)创建Vue项目的超详细过程记录 什么是 Vue-cli Vue-cli 是一个命令行工具,通过它可以快速创建新的 Vue 工程。Vue-cli 其实是一个基于 Node.js 的命令行工具,封装了 Vue.js 相关的项目创建流程,可以帮助我们快速的创建一个 Vue.js 项目。 安装 Vue-cli 在安装 Vue-cli 之前,首…

    Vue 2023年5月27日
    00
  • 详解React中的不可变值

    详解React中的不可变值 在使用React进行开发时,不可变值是一个非常重要的概念。在不可变值的约束下,我们可以在React组件的生命周期中避免出现直接修改state的情况。这不仅可以减少错误,而且还可以实现更好的性能。 不可变值的定义 所谓不可变值,指的是一旦被创建,就不能再被修改的值。在JavaScript中,可以通过以下几种方式创建不可变值: 字符串…

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