我在页面上有多个音频元素,这些元素是根据用户使用复选框的选择使用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)
现在,事件侦听器似乎没有按照我期望的方式运行,音轨之间没有延迟,并且多个音轨同时播放。我希望获得有关如何解决此问题的任何建议,如果我可以在没有递归的情况下做到这一点,那将是更好的选择。这可能会运行一段时间,我想避免它占用大量内存。
最佳答案
目前,事件监听器似乎并不像我那样
预期,音轨之间没有延迟,并且有多个音轨播放
同时。
您正在调用.play()
而不是引用.play
;尝试在()
调用中的.play()
之后删除setTimeout
。同样,在.pause()
事件中调用ended
似乎没有必要。不确定delayms
在哪里定义?
setTimeout(audioElements[index].play, delayms);
关于javascript - 随机播放音轨,无需递归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37379029/