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);
      }
    };

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

(0)

相关推荐

  • vue离开页面时如何销毁定时器

    目录 vue离开页面销毁定时器 组件里定时器销毁问题 解决方法1 解决方案2 vue离开页面销毁定时器 beforeDestroy() { if(this.timer) { clearInterval(this.timer); //关闭  }  //利用vue的生命周期函数 vue 是单页面应用,路由切换后,定时器并不会自动关闭,需要手动清除,当页面被销毁时,清除定时器即可. 组件里定时器销毁问题 我在a页面写一个定时,让他每秒钟打印一个1,然后跳转到b页面,此时可以看到,定时器依然在执行.这样

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

    本文实例为大家分享了vue页面使用多个定时器的具体代码,供大家参考,具体内容如下 问题描述 vue页面使用多个定时器 html: <div class="prod-item">       <ul>         <li           v-for="(item, index) in state.list"           :key="index"           :class="[    

  • Vue页面中引入img图片的方法

    我们在学习html的时候,图片标签<img>引入图片 <img src="../assets/images/avatar.png" width="100%"> 但是这样会有2个弊端: 因为采用绝对路径引入,所以如果后面这张图片移动了目录,就需要修改代src里的路径 如果这张图片在同一页面内有多个地方要使用到,就需要引入多次,而且图片移动了目录,这么多地方都要修改src路径 怎么办?使用动态路径import.require 首先讲讲这两个兄弟,

  • vue页面锁屏的完美解决方法记录

    目录 vue实现页面锁屏完美解决 1.禁止浏览器返回按钮 2.书写锁屏页面和相关路由 3.在router.beforeEach()路由首首位加上以下代码 4.实现退出锁屏重新登录 总结 vue实现页面锁屏完美解决 最新写项目 客户要求写一个锁屏功能.静下心来,慢慢看 ,相信你会有收获的. 功能点 1.禁止浏览器返回按钮. 2.手动输入路由会强制跳到锁屏页面. 3.必须输入正确密码或者重新登录该系统. 思路:锁屏的思路从 登录开始在登录的时候 拿到密码 使用md5对密码加密, 然后存到vuex或者

  • vue页面加载闪烁问题的解决方法

    v-if 和 v-show 的区别 v-if只会在满足条件时才会编译,而v-show不管是否满足条件始终会编译,v-show的显示与隐藏只是简单的切换CSS的display属性. 也就是说,在使用v-if时,若值为false,那么页面将不会有这个html标签生成.而v-show:不论其值是false还是true,html元素都会存在,只是简单的切换css的display属性. 使用场景 一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗.因此,如果需要频繁切换 v-sho

  • vue页面跳转后返回原页面初始位置方法

    vue页面跳转到新页面之后,再由新页面返回到原页面时候若想返回调出原页面的初始位置,怎么来解决这个问题呢?首先我们应该在跳出页面时候记录下跳出的scrollY,返回原页面的时候在设置返回位置为记录下的scrolly即可,scrolly我用的是vuex状态管理器来保存的.整个环境是基于vue-cli搭建的 一.main.js里面配置vuex //引用vuex import Vuex from 'vuex' Vue.use(Vuex) 二.main.js里面vuex状态管理 var store =

  • 详解Vue.js在页面加载时执行某个方法

    jQuery中可以这样写 vue中,如果要达到相同效果,可以使用vue的生命周期函数,如create或者mounted 附上vue.js的生命周期函数执行流程 总结 以上所述是小编给大家介绍的Vue.js在页面加载时执行某个方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • vue多页面开发和打包正确处理方法

    前段时间做项目,技术栈是vue+webpack,主要就是官网首页加后台管理系统 根据当时情况,分析出三种方案 一个项目代码里面嵌两个spa应用(官网和后台系统) 分开两套项目源码 一套项目源码里面就一个spa应用 思考: 直接否定了一套项目源码里一个spa应用(ui样式会相互覆盖,如果没有代码规范后期比较难维护) 两套源码的话,后台可能开两个端口,然后需要用nginx反向代理可能比较麻烦,而且前端开发也比较麻烦麻烦,毕竟需要维护两个git仓库,两套git上线流程,可能会损耗很多时间. 对自己的技

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

    前言 几周前,我写了关于 Vue 路由的使用和在 Vue 页面导航的文章.这是在应用程序中探索的一个基本例子. 通常,在将导航构建到应用程序中时,您会发现需要将数据从一个页面传递到另一个页面.(不通顺)例如,您遵循 master-detail 模式,其中您有一个数据列表,通过更深入地挖掘可以获得关于列表中特定项的更多信息. 我们将学习如何使用路由和 URL参数以及查询参数在 Vue 页面之间传递数据. 如果你还没有读过我之前的教程或者不熟悉 vue-router 库,我建议你温习一下. 利用 U

  • Vue页面骨架屏的实现方法

    在开发webapp的时候总是会受到首屏加载时间过长的影响,主流的解决方法是在载入完成之前显示loading图效果,而一些大公司会配置一套服务端渲染的架构来解决这个问题.考虑到ssr所要解决的一系列问题,越来越多的APP采用了"骨架屏"的方式去提升用户体验. 小米商城: 一.分析Vue页面的内容加载过程 vue项目中的入口index.html只有简单的内容: <!DOCTYPE html> <html lang="zh-CN"> <hea

  • vue使用v-if v-show页面闪烁,div闪现的解决方法

    在页面层次结构,数据较多的时候,用v-if或者v-show就会出现div闪现,或者部分闪烁的结果. 可以在根元素添加v-cloak来解决,并且设置它的样式即可. 代码只是示例,还需要自己修改测试. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style>

随机推荐