【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定时器并不是立即执行一次,而是等待间隔之后才开始循环执行

目录
相关文章
|
2天前
|
JavaScript 前端开发 测试技术
使用 Vue CLI 脚手架生成 Vue 项目
通过 Vue CLI 创建 Vue 项目可以极大地提高开发效率。它不仅提供了一整套标准化的项目结构,还集成了常用的开发工具和配置,使得开发者可以专注于业务逻辑的实现,而不需要花费大量时间在项目配置上。
54 7
使用 Vue CLI 脚手架生成 Vue 项目
|
3天前
|
JavaScript 算法
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
“Error: error:0308010C:digital envelope routines::unsupported”启动vue项目遇到一个错误【已解决
8 1
|
3天前
|
JavaScript
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
error Component name “Login“ should always be multi-word vue/multi-word-component-names【已解决】
9 1
|
5天前
|
JavaScript 前端开发 Java
【vue实战项目】通用管理系统:作业列表
【vue实战项目】通用管理系统:作业列表
19 0
|
5天前
|
JavaScript API
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
21 2
|
5天前
|
JavaScript API
【vue实战项目】通用管理系统:信息列表,信息录入
【vue实战项目】通用管理系统:信息列表,信息录入
13 3
|
5天前
|
JavaScript 前端开发 API
【vue实战项目】通用管理系统:学生列表
【vue实战项目】通用管理系统:学生列表
19 2
|
11天前
|
JavaScript 前端开发 开发者
vue3+ts配置跨域报错问题解决:> newpro2@0.1.0 serve > vue-cli-service serve ERROR Invalid options in vue.
【6月更文挑战第3天】在 Vue CLI 项目中遇到 &quot;ERROR Invalid options in vue.config.js: ‘server’ is not allowed&quot; 错误是因为尝试在 `vue.config.js` 中使用不被支持的 `server` 选项。正确配置开发服务器(如代理)应使用 `devServer` 对象,例如设置代理到 `http://xxx.com/`: ```javascript module.exports = { devServer: {
24 1
|
5天前
|
缓存 JavaScript
【vue实战项目】通用管理系统:首页
【vue实战项目】通用管理系统:首页
13 2
|
5天前
|
JavaScript 前端开发 数据安全/隐私保护
【vue实战项目】通用管理系统:登录页
【vue实战项目】通用管理系统:登录页
13 2