订单列表多个倒计时(vue+js)

实现场景:订单列表中多个倒计时(vue

代码部分

<template>
  <div class="">
    <div v-for="(item,index) in list" :key="index">{{item.countDownTime }}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
        list: [{endTime:"2020-11-02 15:06:36"},
        {endTime:"2020-11-12 16:06:36"},
        {endTime:"2020-11-08 04:06:36"},
        {endTime:"2020-11-17 19:06:36"}]
    }
  },
  created() {
    //这里应该写在请求接口拿到数据后,这里我使用模拟数据
   for (let i in this.list) {
     this.list[i].countDownTime = "";
     this.countDown(i);
   }
  },
  methods: {
  //倒计时
    countDownFun(time) {
      // console.log(time)
      let startTime = new Date(); //当前时间
      let end = new Date(time); //结束时间
      // console.log(end)
      let result = parseInt((end - startTime) / 1000); //计算出豪秒
      let d = parseInt(result / (24 * 60 * 60)); //用总共的秒数除以1天的秒数
      let h = parseInt((result / (60 * 60)) % 24); //精确小时,用去余
      let m = parseInt((result / 60) % 60); //剩余分钟就是用1小时等于60分钟进行趣余
      let s = parseInt(result % 60);
      //当倒计时结束时,改变内容
      if (result <= 0) {
        return "倒计时结束";
      }
      if (h < 10) {
        h = "0" + h;
      }
      if (s < 10) {
        s = "0" + s;
      }
      if (h == 0 && m == 0) {
        return "剩余" + s + "秒";
      } else if (h == 0) {
        return "剩余" + m + "分" + s + "秒";
      } else if(d == 0) {
        return "剩余" + h + "时" + m + "分" + s + "秒";
      } else {
        return "剩余" + d + "天" + h + "时" + m + "分" + s + "秒";
      }
    },
    
    // 定时器
    // 页面多个倒计时 归零时清除
    countDown(i) {
      let that = this;
      let item = that.list[i];
      that.list[i].countDownFn = setInterval(() => {
        //  console.log(that.countDownFun(item.endTime))
        if (that.countDownFun(item.countDownTime) == "倒计时结束") {
          clearInterval(that.list[i].countDownFn); //清除定时器
        } else {
          item.countDownTime = that.countDownFun(item.endTime);
          that.$set(
            that.list,
            item.countDownTime,
            that.countDownFun(item.endTime)
          );
        }
      }, 1000);
    }
    
  }
};
</script>
<style scoped lang="less">
</style>

最终效果

在这里插入图片描述

转载于:订单列表多个倒计时(vue+js)_偶尔冒泡~的博客-CSDN博客 

如果您使用Vue.js编写订单列表,您可以使用以下代码来实现多个待支付倒计时: 1. 首先,在组件的data选项中,创建一个名为“orders”的数组,其中包含您的订单对象。每个订单对象应该有一个名为“dueDate”的属性,表示订单的截止日期。 ``` data() { return { orders: [ { id: 1, dueDate: new Date('2021-09-30T23:59:59') }, { id: 2, dueDate: new Date('2021-10-05T23:59:59') }, { id: 3, dueDate: new Date('2021-10-10T23:59:59') }, ] } } ``` 2. 在组件的模板中,使用v-for指令循环渲染订单列表,并在每个订单中添加一个计时器组件。该计时器组件应该传递订单的截止日期作为参数。 ``` <template> <div> <h2>订单列表</h2> <ul> <li v-for="order in orders" :key="order.id"> 订单 #{{ order.id }} - 截止日期:{{ order.dueDate.toLocaleString() }} <countdown :due-date="order.dueDate"></countdown> </li> </ul> </div> </template> ``` 3. 创建一个名为“Countdown”的计时器组件,该组件接受一个名为“dueDate”的prop。在组件的data选项中,创建一个名为“timeLeft”的属性,表示剩余时间)。 ``` <template> <div> 剩余时间:{{ timeLeft }} </div> </template> <script> export default { props: { dueDate: { type: Date, required: true } }, data() { return { timeLeft: 0 } }, } </script> ``` 4. 在组件的mounted钩子函数中,启动一个计时器,每更新一次“timeLeft”属性。计算剩余时间的方法使用Javascript的Date对象,通过计算当前时间和截止日期之间的差值来计算。 ``` <script> export default { props: { dueDate: { type: Date, required: true } }, data() { return { timeLeft: 0 } }, mounted() { setInterval(() => { const now = new Date() const diff = Math.floor((this.dueDate - now) / 1000) this.timeLeft = diff > 0 ? diff : 0 }, 1000) }, } </script> ``` 现在,您的订单列表应该具有多个待支付倒计时,每个订单都有一个独立的计时器。当订单的截止日期到达时,计时器将停止并显示“0”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值