vue页面使用多个定时器的方法

 更新时间:2022年09月14日 11:26:42   作者:琳木兮  
这篇文章主要为大家详细介绍了vue页面使用多个定时器的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了vue页面使用多个定时器的具体代码,供大家参考,具体内容如下

问题描述

vue页面使用多个定时器

html:

<div class="prod-item">
      <ul>
        <li
          v-for="(item, index) in state.list"
          :key="index"
          :class="[
            item.isDisabled ? 'active_li_02' : 'active_li_01',
            'flex ml-10 mr-10  mt-25',
          ]"
        >
          <div class="img">
            <img :src="item.imageUrl" alt="" />
          </div>
          <div class="item-right">
            <div
              :class="[
                item.isDisabled ? 'active_title_02' : 'active_title_01',
                'title',
              ]"
            >
              {{ item.name }}
            </div>
            <van-button
              type="default"
              :class="[
                item.isDisabled ? 'active_btn_02' : 'active_btn_01',
                'btn mt-30',
              ]"
              @click.stop="checkLoginUser(item)"
              :disabled="item.isDisabled"
            >
              {{ item.saleTit }}
            </van-button>
          </div>
        </li>
      </ul>
</div>

js:

js:请求数据,遍历数组,然后根据数据字段判断,如果服务器的开始时间小于服务器的系统时间那就倒计时,appointmentStatus 这个字段为2的时候 且服务器的开始时间小于服务器的系统时间.
let appointStart = new Date( item.appointStart.replace(/-/g, "/") ).getTime(); 这个是兼容ios的时间格式

const getProdList = async () => {
      //预售商品列表
      await $api.fns.PreSale.getPreSaleList({
        params: {
          iconType: 2,
        },
      })
        .then((res) => {
          if (res?.data) {
            console.log(res.data);
            // `appointment_status`'预约状态 1已上架、2已下架',
            state.list = res.data;
            res.data.map((item) => {
              item.isDisabled = true;
              item.saleTit = "等待预约";
              item.timer = null;
              if (item.appointStart) {
                let appointStart = new Date(
                  item.appointStart.replace(/-/g, "/")
                ).getTime();
                let systemDate = new Date(
                  item.systemDate.replace(/-/g, "/")
                ).getTime();
                item.times = Math.round(
                  parseInt(appointStart - systemDate) / 1000
                );
              }
            });
            state.list = res.data;
            state.list.map((item, index) => {
              if (item.appointmentStatus === 2) {
                if (item.times) {
                  // 还没有开始预购
                  if (item.times > 0) {
                    startCountdown(item.times, index);
                    // 预购结束
                  } else {
                    item.isDisabled = true;
                    item.saleTit = "预购结束";
                  }
                  // 时间为空的时候,就只有预购结束,和立即预购两种状态
                } else {
                  item.isDisabled = true;
                  item.saleTit = "预购结束";
                }
              } else {
                item.isDisabled = false;
                item.saleTit = "立即预购";
              }
            });
           
          }
        })
        .catch((error) => {
          console.log(error);
        });
    };

因为每一个定时器的时间都不一样,所以每一个定时器结束了要清除定时器 window.clearInterval(state.list[index].timer);

// 倒计时
const startCountdown = (times, index) => {
      console.log("index", index, state.list);
      // 跟开始时间相比如果当前时间小于开始时间,那就还没有开始
      // let times = Math.round(parseInt(appointStart - systemDate) / 1000);
      if (times > 0) {
        state.list[index].timer = setInterval(() => {
          state.list[index].times--;
          console.log("state.times-----111", state.list[index].times);
          if (state.list[index].times === 0) {
            state.list[index].times = 0;
            state.list.map(() => {
              state.list[index].isDisabled = false;
              state.list[index].saleTit = "立即预购";
            });

            window.clearInterval(state.list[index].timer);
          }
        }, 1000);
      }
    };

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vue中的echarts图表如何实现loading效果

    Vue中的echarts图表如何实现loading效果

    这篇文章主要介绍了Vue中的echarts图表如何实现loading效果,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue搜索高亮popsearch组件的实现示例

    vue搜索高亮popsearch组件的实现示例

    有时候给页面内容添加一个关键词搜索功能,如果搜索结果能够像浏览器搜索一样高亮显示,那找起来就会很明显体验会好很多,本文就来介绍一下vue搜索高亮popsearch组件的实现示例,感兴趣的可以了解一下
    2023-09-09
  • Vue中的循环及修改差值表达式的方法

    Vue中的循环及修改差值表达式的方法

    这篇文章主要介绍了Vue中的循环及修改差值表达式的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • vue中el-date-picker选择日期的限制的项目实践

    vue中el-date-picker选择日期的限制的项目实践

    ElementUI的el-date-picker使用时,有时候想要限制用户选择的时间范围,本文就来介绍了vue中el-date-picker选择日期的限制的项目实践,感兴趣的可以了解一下
    2023-10-10
  • Vue 重置data的数据为初始状态操作

    Vue 重置data的数据为初始状态操作

    这篇文章主要介绍了Vue 重置data的数据为初始状态操作方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用vue-router在Vue页面之间传递数据的方法

    使用vue-router在Vue页面之间传递数据的方法

    这篇文章主要介绍了使用vue-router在Vue页面之间传递数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Vue项目中跨域问题解决方案

    Vue项目中跨域问题解决方案

    本文给大家介绍了vue项目中跨域问题的完美解决方案,通过更改header,使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建),具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • element-ui中Table表格省市区合并单元格的方法实现

    element-ui中Table表格省市区合并单元格的方法实现

    这篇文章主要介绍了element-ui中Table表格省市区合并单元格的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • vue初尝试--项目结构(推荐)

    vue初尝试--项目结构(推荐)

    这篇文章主要介绍了vue初尝试--项目结构的相关知识,需要的朋友可以参考下
    2018-01-01
  • vue3中7种路由守卫的使用大全举例

    vue3中7种路由守卫的使用大全举例

    最近在学习vue,感觉路由守卫这个地方知识点挺多的,而且很重要,下面这篇文章主要给大家介绍了关于vue3中7种路由守卫的使用大全,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03

最新评论