我需要按顺序播放一系列声音。在我目前的代码中,声音几乎是一次性播放的,而不是按顺序播放的。我尝试过各种setTimeout()、setInterval()组合,但由于声音的长度各不相同,所以我没能做到这一点。有没有办法我可以设置一个条件标志,以确保声音不会重叠?睡眠()函数是唯一的答案吗?
function playAll()
{
for (i = 0; i < 10; i++) {
playSound(sound[i]);
// if sound is finished, continue loop
// need some type of flag?
}
}
发布于 2021-03-02 01:46:14
HTMLAudioElements fire a
元素停止播放时引发的。如果你放弃了
这样,当下一次调用时,它将返回一个Promise
事件在元素上激发,则可以只
循环中的调用:
const playSound = soundElement => {
soundElement.play();
return new Promise((resolve) => {
soundElement.addEventListener('ended', resolve)
})
}
function playAll() {
for (let i = 0; i < 10; i++) { // don't forget to declare the variable with `let`
await playSound(sound[i]);
}
}
https://stackoverflow.com/questions/66426938
复制相似问题