按顺序播放多个音频文件(Javascript)

按顺序播放多个音频文件(Javascript),javascript,audio,sequence,Javascript,Audio,Sequence,有人能解释一下这种行为吗?我有一个按钮,当它被点击时,我需要按顺序播放6个mp3文件。我正在使用ONENED事件处理程序: var index; playButton.onclick=function(){ index = 0; conj[0].play(); conj[index].onended = function() { if(index < conj.length){ index++; conj[index].play(); }

有人能解释一下这种行为吗?我有一个按钮,当它被点击时,我需要按顺序播放6个mp3文件。我正在使用ONENED事件处理程序:

var index;
playButton.onclick=function(){
  index = 0;
  conj[0].play();
  conj[index].onended = function() {
    if(index < conj.length){
      index++;
      conj[index].play();
    }
  };
}
var指数;
playButton.onclick=function(){
指数=0;
conj[0]。play();
conj[index].onended=function(){
if(索引<联合长度){
索引++;
conj[index].play();
}
};
}
使用代码中的index++行,我尝试增加index,以便在当前音频文件播放完毕后,它播放阵列conj中的下一个音频文件,等等,直到它播放阵列中的第六个也是最后一个音频文件。但他们只开火一次。换句话说,conj[0]播放,然后onended被解雇,然后conj[1]播放,就这样。ONENED不会再次开火。 现在,当我注释掉“index++;”行时,第一个mp3 conj[0]被播放,并且onended一直启动,因此conj][0]只是在循环中播放。
换句话说,如果我不改变index的值,onended只会继续激活。我知道这有点愚蠢,但我花了太多时间试图弄明白。

您只处理了第一个音频的“合一”事件。 当调用此行时。
conj[index].onended=function()
指数为0。 你需要做的是有一个循环,这样做

for (var idx = 0; idx < conj.length - 1 ; idx++) {
conj[idx].onended = function() {
      conj[idx+1].play();
  };
}
for(var idx=0;idx
每个音频(最后一个除外)的哪个电源和处理器表示“播放完毕后,触发下一个要播放的音频。”

完整示例

var index;
playButton.onclick=function(){
  // sets up each audio file's onended event to play the next audio file
  for (var idx = 0; idx < conj.length - 1 ; idx++) {
    conj[idx].onended = function() {
      conj[idx+1].play();
    };
  }
  // start playing the first audio.
  conj[0].play();
}
var指数;
playButton.onclick=function(){
//设置每个音频文件的onended事件以播放下一个音频文件
for(var idx=0;idx
您只处理了第一个音频的“ONENED”事件。 当调用此行时。
conj[index].onended=function()
指数为0。 你需要做的是有一个循环,这样做

for (var idx = 0; idx < conj.length - 1 ; idx++) {
conj[idx].onended = function() {
      conj[idx+1].play();
  };
}
for(var idx=0;idx
每个音频(最后一个除外)的哪个电源和处理器表示“播放完毕后,触发下一个要播放的音频。”

完整示例

var index;
playButton.onclick=function(){
  // sets up each audio file's onended event to play the next audio file
  for (var idx = 0; idx < conj.length - 1 ; idx++) {
    conj[idx].onended = function() {
      conj[idx+1].play();
    };
  }
  // start playing the first audio.
  conj[0].play();
}
var指数;
playButton.onclick=function(){
//设置每个音频文件的onended事件以播放下一个音频文件
for(var idx=0;idx
这不起作用。我认为这是因为onended是异步执行的。我认为for循环不是一个好主意。但您让我更好地理解了onended的工作原理……它的工作原理是:conj[0]。play();conj[0]。oneded=function(){conj[1]。play();};conj[1]。oneded=function(){conj[2]。play();};conj[2].onended=function(){conj[3].play();};conj[3].onended=function(){conj[4].play();};conj[4].onended=function(){conj[5].play();};我只是想找个方法用更少的代码抱歉我不够清楚。上面的循环只是为ONENED设置事件处理程序。我将进行编辑,以显示完整的代码可能是什么样子。这不起作用。我认为这是因为onended是异步执行的。我认为for循环不是一个好主意。但您让我更好地理解了onended的工作原理……它的工作原理是:conj[0]。play();conj[0]。oneded=function(){conj[1]。play();};conj[1]。oneded=function(){conj[2]。play();};conj[2].onended=function(){conj[3].play();};conj[3].onended=function(){conj[4].play();};conj[4].onended=function(){conj[5].play();};我只是想找个方法用更少的代码抱歉我不够清楚。上面的循环只是为ONENED设置事件处理程序。我将进行编辑以显示完整代码的外观。