【vue】setInterval的嵌套实例

简介: 【vue】setInterval的嵌套实例

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

项目中需要实现播放音频次数和自动播放,这时我想到了定时器,那么如何实现呢?

html

<!-- 音频  -->
    <audio id="audio" @timeupdate="updateTime" controls="controls" hidden>您的浏览器不支持 audio 标签。</audio>

播放次数

script

/**
     * 播放声音-控制播放次数
     * @Date: 2019年11月4日15:26:11
     * @author 苑仁杰
     */
    sound() {
      var vm = this; //保存一份原有对象
      //控制播放次数
      vm.soundCount = 1; // 计数器初值为1,因为首先要播放一次1
      //首先播放一次
      var myAudio = document.getElementById("audio");
      myAudio.src = "";
      myAudio.src = vm.soundAdress;
      myAudio.play();
      vm.soundWifi(vm.currentTime);
      var numCount = parseInt(vm.playInterval) + 2;
      //循环定时器
      vm.timePlayCount = setInterval(() => {
        // 当要求播放次数大于已播放次数,就播放
        if (vm.setPlayCount > vm.soundCount) {
          myAudio.src = "";
          myAudio.src = vm.soundAdress;
          myAudio.play();
          vm.soundWifi(vm.currentTime);
          vm.soundCount++;
        }
        //如果计算的次数等于大于播放的次数,立刻清除定时器,停止播放
        if (
          vm.setPlayCount == vm.soundCount ||
          vm.setPlayCount < vm.soundCount
        ) {
          vm.clearSoundTimer(); // 清理声音定时器
        }
      }, numCount * 1000); // 每隔多长时间播放一次1
    },

自动播放

script

/**
     * 自动播放声音
     * @Date: 2019年11月4日15:26:11
     * @author 苑仁杰
     */
    soundTurnAuto() {
      var vm = this;
      //将字符串转为整型数字
      let playIntervalNum = 0;
      playIntervalNum = parseInt(vm.playInterval) + 2;
      let setPlayCountNum = 0;
      setPlayCountNum = parseInt(vm.setPlayCount);
      let skipDelayOptionsNum = 0;
      skipDelayOptionsNum = parseInt(vm.skipDelayOptions);
      let number = 0;
      number = playIntervalNum * setPlayCountNum + skipDelayOptionsNum;
      //调用下一次播放,然后开始每隔x秒自动播放y次,然后播放次数结束之后,延迟z秒后播放下一个
      let count = 1;
      //自动播放器
      vm.isTurnAutoTimer = setInterval(() => {
        count++; //计算自动播放每个单词次数
        vm.swipeLeftNext();
        // vm.$refs.wifiBright.wifiBrightClick();
      }, number * 1000);
    },

分析

当定时器嵌套定时器时,你会发现一个问题,如果内定时器的执行间隔时间是大于外定时器的间隔间,外定时器并不会等内定时器执行完再执行,所以此时你需要计算内定时器需要的时间,让外定时器等内定时器执行完毕之后再继续执行

另外,我发现setInterval定时器并不是立即执行一次,而是等待间隔之后才开始循环执行

目录
相关文章
|
6天前
|
JavaScript
vue消息订阅与发布
vue消息订阅与发布
|
2天前
|
JavaScript
理解 Vue 的 setup 应用程序钩子
【10月更文挑战第3天】`setup` 函数是 Vue 3 中的新组件选项,在组件创建前调用,作为初始化逻辑的入口。它接收 `props` 和 `context` 两个参数,内部定义的变量和函数需通过 `return` 暴露给模板。`props` 包含父组件传入的属性,`context` 包含组件上下文信息。`setup` 可替代 `beforeCreate` 和 `created` 钩子,并提供类似 `data`、`computed` 和 `methods` 的功能,支持逻辑复用和 TypeScript 类型定义。
20 11
|
5天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
vue尚品汇商城项目-day07【vue插件-50.(了解)表单校验插件】
14 4
|
5天前
|
JavaScript
vue尚品汇商城项目-day07【51.路由懒加载】
vue尚品汇商城项目-day07【51.路由懒加载】
15 4
|
6天前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
5天前
|
JavaScript
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
vue尚品汇商城项目-day07【vue插件-54.(了解)生成二维码插件】
14 2
|
6天前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1039 0
|
8天前
|
JavaScript
vue组件中的插槽
本文介绍了Vue中组件的插槽使用,包括单个插槽和多个具名插槽的定义及在父组件中的使用方法,展示了如何通过插槽将父组件的内容插入到子组件的指定位置。
|
6天前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
下一篇
无影云桌面