VUE中利用setTimeout写循环播放效果

本文介绍了如何在Vue中利用setTimeout实现音频循环播放的效果。通过设置定时器在1000毫秒后触发,确保定时器生效后再清除,以达到循环播放音频的目的。当用户点击停止时,可以有效停止循环播放。

产品的需求:一个音频对象数组,用户点击播放,从第一个开始每个播放一次循环,点击停止时停止循环播放。

不多废话直接上代码


        // 从选中单词开始循环播放音频  查询store值 为0从1开始  循环中定时调用子组件方法
        audioOn(flag){
        	// 播放与停止播放按钮切换显示的控制器  可忽略
            this.clickShow = !this.clickShow
            // 这里利用vuex来记录当前数组中播放到了哪一位的次序(含页面效果需求)
            let checkedBlockIndex = this.$store.state.vocabulary.checkedBlockIndex;
            // 处理序号
            checkedBlockIndex===0?null:checkedBlockIndex-=1;
            // 若是点击播放
            if(flag){
            	// 每一个音频播放所需等待的时间变量
                let timeSum = 0;
                // $refs.wordcard.length就是数组长度 结合页面展示效果获取 可忽略
                for(let i=checkedBlockIndex;i<this.$refs.wordcard.length;i++){
                    for(let j=0;j<3;j++){
                    // 每个播放三遍 每次时间timeSum递增 执行后setTimeout函数依次注册在JS宏任务队列中
                        this.timer= setTimeout(() => {
                            this.$refs.wordcard[i].contentBlockClick()
                        }, timeSum);
                        timeSum+=2000;
                    }
                }
            } else { // 若是点击停止播放  无论当前执行到哪一个setTimeout函数  全部注销即可
                for(let j=0;j<this.timeout;j++){
                    clearTimeout(j);
                }
            }
        },

要点:
设置定时器1000ms后,定时器里的函数会被加入到宏任务队列里,并执行。
此时,设置的只执行一次的定时器已经生效过了,清除定时器没有意义。
timer的值为定时器的 序号,清除定时器要在定时器触发前调用才有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跳动的世界线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值