依次播放多个音频文件(JavaScript)

时间:2019-09-24 16:49:02

标签: javascript audio sequence

有人可以解释这种行为吗?我有一个按钮,当单击它时,我需要依次播放6个mp3文件。我正在使用onended事件处理程序:

var index;
playButton.onclick=function(){
  index = 0;
  conj[0].play();
  conj[index].onended = function() {
    if(index < conj.length){
      index++;
      conj[index].play();
    }
  };
}

在代码中使用index ++行,我尝试增加index,以便在当前音频文件播放完毕后,它播放数组conj中的下一个音频文件,依此类推,直到播放第6个和最后一个音频文件为止。数组。但是最后只能开火一次。换句话说,conj [0]播放,然后onended被触发,然后conj [1]播放,就是这样。 onended不会再次触发。 现在,当我注释掉“ index ++;”时在第一行,第一个mp3 conj [0]会被播放,并且继续播放,因此conj] [0]只是循环播放。 换句话说,onend仅在不更改index值的情况下才会触发。我知道这很愚蠢,但是我花了太多时间试图弄清楚。

1 个答案:

答案 0 :(得分:0)

您只处理了第一个音频的“ onended”事件。 何时调用此行。 conj[index].onended = function() 索引为0。 您需要做的是做一个循环,执行这样的操作

for (var idx = 0; idx < conj.length - 1 ; idx++) {
conj[idx].onended = function() {
      conj[idx+1].play();
  };
}

每个音频(最后一个音频除外)的供应和处理程序显示“一旦我完成播放,就会触发下一个音频播放。”

完整示例

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();
}