Javascript 随机播放音频曲目,无需递归
我在一个页面上有多个音频元素,这些元素是根据用户使用复选框选择的javascript创建的。当用户单击播放按钮时,我希望播放随机选择的音频曲目,曲目之间的延迟可由用户调整,直到他们单击停止按钮。我有这个密码Javascript 随机播放音频曲目,无需递归,javascript,jquery,html,html5-audio,Javascript,Jquery,Html,Html5 Audio,我在一个页面上有多个音频元素,这些元素是根据用户使用复选框选择的javascript创建的。当用户单击播放按钮时,我希望播放随机选择的音频曲目,曲目之间的延迟可由用户调整,直到他们单击停止按钮。我有这个密码 function loopmusic(){ if (!looping){ alert('exiting loopmusic()'); return 0; } var audioElements = document.getElementsByTagName('au
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);
}
这段代码是根据我在这里读到的内容改编的:
现在,事件侦听器似乎没有按照我预期的方式运行,曲目之间没有延迟,并且多个曲目同时播放。我想要任何关于如何解决这个问题的指针,如果我能在没有递归的情况下做到这一点,那就更好了。这可能会运行一段时间,我希望避免它消耗大量内存
现在,事件侦听器的行为似乎与我的不同
预计,曲目之间没有延迟,多个曲目播放
同时,
您正在调用.play()
,而不是引用.play
;尝试在setTimeout
调用中删除()
之后的.play()
。此外,在结束时调用.pause()
事件似乎没有必要。不确定在哪里定义了delayms
setTimeout(audioElements[index].play, delayms);
现在,事件侦听器的行为似乎与我的不同
预计,曲目之间没有延迟,多个曲目播放
同时,
您正在调用.play()
,而不是引用.play
;尝试在setTimeout
调用中删除()
之后的.play()
。此外,在结束时调用.pause()
事件似乎没有必要。不确定在哪里定义了delayms
setTimeout(audioElements[index].play, delayms);
为什么在曲目完成后调用.pause()
?delayms
在哪里定义?抱歉,我不想发布大量代码,是的,在调用loopmusic()函数之前定义了循环全局变量和delayms全局变量。我之所以调用.pause(),是因为我在另一篇帖子中看到了它,并认为它会立即停止播放多首曲目,但我不知道此时发生了什么,所以非常感谢您的建议。您在帖子中尝试过js
?也就是说,在处删除()
。在处删除()
?哪个会立即调用.play()
?为什么在曲目完成后调用.pause()
?delayms
在哪里定义?抱歉,我不想发布大量代码,是的,在调用loopmusic()函数之前定义了循环全局变量和delayms全局变量。我之所以调用.pause(),是因为我在另一篇帖子中看到了它,并认为它会立即停止播放多首曲目,但我不知道此时发生了什么,所以非常感谢您的建议。您在帖子中尝试过js
?也就是说,在处删除()
。在处删除()
?哪个会立即调用.play()
?很抱歉,我没有包含更多的代码,delayms是在调用函数loopmusic()之前定义的,它介于1000和6000之间。我尝试了这种方法,但曲目没有播放:setTimeout(audioElements[index].play,delayms);;还有一种方法可以避免递归吗?是的,有一种方法可以在没有递归的情况下执行操作。您可以使用.queue()
。“我尝试了这种方法,但是音轨没有播放:“你能创建一个JSFIDLE来演示吗?我在这里创建了一个JSFIDLE,但是我没有在线音轨,我会尝试在线查找一秒钟的音轨,以便快速测试。”。试试维基百科或知识共享。随机选择和播放音频可能很简单。我找到了一种保持这种简单的方法,我有一个页面,每个音轨都有一个复选框,单选按钮用于允许重复或不允许重复,还有一个按钮用于在新窗口(w/javascript)中编写带有HTML5声音播放器的页面,这种方法允许我创建一个任意数量元素的随机排列的播放列表。现在我在播放列表中写了1000首歌曲,弹出窗口仍然很快打开!如果有人对这种方法感兴趣,我可以在JSFIDLE上发布代码。抱歉,我没有包含更多代码,delayms是在调用函数loopmusic()之前定义的,它介于1000和6000之间。我尝试了这种方法,但曲目没有播放:setTimeout(audioElements[index].play,delayms);;还有一种方法可以避免递归吗?是的,有一种方法可以在没有递归的情况下执行操作。您可以使用.queue()
。“我尝试了这种方法,但是音轨没有播放:“你能创建一个JSFIDLE来演示吗?我在这里创建了一个JSFIDLE,但是我没有在线音轨,我会尝试在线查找一秒钟的音轨,以便快速测试。”。试试维基百科或知识共享。随机选择和播放音频可能很简单。我找到了一种保持这种简单的方法,我有一个页面,每个音轨都有一个复选框,单选按钮用于允许重复或不允许重复,还有一个按钮用于在新窗口(w/javascript)中编写带有HTML5声音播放器的页面,这种方法允许我创建一个任意数量元素的随机排列的播放列表。现在我在播放列表中写了1000首歌曲,弹出窗口仍然很快打开!如果有人对这种方法感兴趣,我可以在JSFIDLE上发布代码。