在 JQuery 中等到事件发生后再做任何事情
Wait until an event happens before doing anything else in JQuery
我问过类似的问题,但很快发现它不在主题之列,所以让我解释一下我的问题。
我有 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) Uncaught (in promise) DOMException: The play() request was interrupted by a call to 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>
for
循环同步运行。您需要在 ended
处理程序中调用 repeat。
同样,.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);
我问过类似的问题,但很快发现它不在主题之列,所以让我解释一下我的问题。
我有 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) Uncaught (in promise) DOMException: The play() request was interrupted by a call to 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>
for
循环同步运行。您需要在 ended
处理程序中调用 repeat。
同样,.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);