等待事件发生,然后再在JQuery中执行其他操作

问题描述 投票:0回答:1

我问过类似的问题,但很快发现它不在主题之内,所以让我解释一下我的问题。

我有5个音频。目标是每个音频播放3次。

这里是代码:

$('audio').each(function(index){
    playAudio(this.player, index);
});

function playAudio(audio, index){
        var loop = 3;

        // This will loop 3 times
        for(var i = 0; i < loop; i++){
            audio.play();

            $('.worship-items audio').eq(index).on('ended', function(){
                // When the song has ended, set the progress(current time) back to 0 seconds.
                audio.setCurrentTime(-1);
                audio.pause();
            });
        }
    }

我遇到的问题是控制台给我这个错误:

(((15)未被捕获(在承诺中)DOMException:play()请求被对pause()的调用中断了。

有人可以帮我这个忙吗?

编辑:我被要求添加html,因此这里是:

<audio src="audio1.mp3"></audio>
<audio src="audio2.mp3"></audio>
<audio src="audio3.mp3"></audio>
<audio src="audio4.mp3"></audio>
<audio src="audio5.mp3"></audio>
jquery audio media-player html5-audio
1个回答
0
投票

for循环同步运行。您需要在ended处理程序中放置要重复的呼叫。

类似地,.each()同步运行。仅当前一个音频的所有重复结束时,才需要开始下一个音频。

function playAudio(audios, index, loop, counter) {
    if (counter >= loop) {
        index++;
        if (index >= audios.length) {
            return;
        }
        playAudio(audios, index, loop, 0);
    }
    let audio = audios[index];
    audio.player.play();
    $(audio).off("ended").on("ended", function() {
        this.player.setCurrentTime(-1);
        playAudio(this, index, loop, counter + 1);
    });
});

playAudio($(".worship-items audio"), 0, 3, 0);
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.