我在页面上有多个音频元素,这些元素是根据用户使用复选框的选择使用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/

10-12 16:56