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

目录
相关文章
|
1天前
|
JavaScript
vue 动态绑定方法
vue 动态绑定方法
6 0
|
1天前
|
JavaScript
vue 手动/局部刷新组件
vue 手动/局部刷新组件
5 0
|
1天前
|
JavaScript 搜索推荐
vue【详解】props —— 子组件接收父组件传入的参数
vue【详解】props —— 子组件接收父组件传入的参数
6 0
|
1天前
|
JavaScript
vue 组件封装 | s-fullpage 全屏滚动 (内含绑定鼠标滑轮滚动事件、避免鼠标滑轮连续滚动、滑动过渡动画等实用技巧)
vue 组件封装 | s-fullpage 全屏滚动 (内含绑定鼠标滑轮滚动事件、避免鼠标滑轮连续滚动、滑动过渡动画等实用技巧)
13 4
|
1天前
|
JavaScript
vue 组件封装 | s-scroll 页面滚动动画
vue 组件封装 | s-scroll 页面滚动动画
6 0
|
1天前
|
JavaScript 容器
Vue 动画 —— 滑动切换动画 / 滑动翻页过渡动画——从顶部到底部、从底部到顶部、从左侧到右侧、从右侧到左侧
Vue 动画 —— 滑动切换动画 / 滑动翻页过渡动画——从顶部到底部、从底部到顶部、从左侧到右侧、从右侧到左侧
8 0
|
1天前
|
JavaScript
Vue 组件封装 | 给汉字注音(带声调),内含汉字转拼音(带声调/不带声调),获取汉字首字母的方法
Vue 组件封装 | 给汉字注音(带声调),内含汉字转拼音(带声调/不带声调),获取汉字首字母的方法
8 0
|
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.
1006 0
|
1天前
|
JavaScript
vue组件封装 | 数字输入框(限制只能输入数字的input,可以指定小数点位数,最大值、最小值)
vue组件封装 | 数字输入框(限制只能输入数字的input,可以指定小数点位数,最大值、最小值)
15 7
|
1天前
|
JavaScript
vue 组件封装 | 图片放大镜(同天猫、淘宝、京东等商品图片放大浏览效果)
vue 组件封装 | 图片放大镜(同天猫、淘宝、京东等商品图片放大浏览效果)
11 6