我在页面上有多个音频元素,这些元素是使用javascript根据用户选择使用复选框创建的。当用户点击“播放”按钮时,我想播放随机选择的音轨,用户可以在音轨之间调整延迟,直到他们点击“停止”按钮。我有这个代码
function loopmusic(){
if (!looping){
alert('exiting loopmusic()');
return 0;
}
var audioElements = document.getElementsByTagName('audio');
var index = Math.floor(Math.random() * audioElements.length);
//audioElements[index].volume=0.5;
$(audioElements[index]).bind("ended", function(){
audioElements[index].pause()
loopmusic()
});
setTimeout(audioElements[index].play(), delayms);
}
该代码改编自我在此处阅读的内容: How to play each audio element on a page (HTML, JQuery, Javascript)
现在,事件监听器似乎没有按我预期的方式运行,轨道之间没有延迟,并且多个轨道同时播放。我想任何关于如何解决这个问题的指针,如果我能做到没有递归,那就更好了。这可能会运行一段时间,我想避免它吃大量的内存。
答案 0 :(得分:0)
现在,事件监听器似乎没有按照我的方式行事 预计,曲目之间没有延迟,并且多个曲目播放 在同一时间。
您正在调用.play()
而不是引用.play
;尝试在()
来电后.play()
关注setTimeout
。此外,在.pause()
事件中调用ended
似乎不是必需的。不确定定义delayms
的位置?
setTimeout(audioElements[index].play, delayms);