我试图循环通过一些元素来改变单个音频元素的音频源,播放它,一旦结束,更改新的src并播放它直到循环遍历所有元素:
var contentAudio = new Audio();;
function audioLoop(index, audioModel) {
while (index < audioModel.length) {
var audio = contentAudio;
audio.src = audioModel[index].src;
audio.play()
audio.addEventListener('ended',
function () {
index++;
});
}
console.log('done');
}
似乎添加事件侦听器不起作用。音频没有播放,我陷入无休止的循环。音频结束事件永远不会被触发。我做错了吗?还有更好的选择吗?
答案 0 :(得分:1)
while
循环是同步的,因此它不会等待您的ended
事件。以下是我建议的内容:
var contentAudio = new Audio();
function audioLoop(index, audioModel) {
(function process(done) {
if (index >= audioModel.length) {
done(); return;
}
var audio = contentAudio;
audio.src = audioModel[index].src;
audio.play()
audio.addEventListener('ended', function () {
index++;
process(done);
});
})(function () {
console.log('done');
});
}
audioModel
也是一个数组。如果是这样,我认为您应该使用audioModel[index].src
而不是audioModel.src
。