我们如何继续在阵列中发挥作用?

时间:2015-04-24 01:58:11

标签: javascript

制作音频播放器。浏览器不兼容尝试使用embed标签播放阵列中的音频。继续比赛,下一场比赛不打。只打一场比赛。我想按顺序播放数组的内容。

var files = ['notibell_1.wav', 'notibell_2.wav', 'notibell_3.wav'];
var daudio = document.createElement('embed');
daudio.setAttribute('id', 'daudio');
daudio.height = "50";
daudio.width = "400";
daudio.controls = true;
daudio.autoplay = true;
daudio.type = "audio/wav";
for (var i = 0; i < files.length; i++) {
  daudio.src = files[i];
}
bottom.appendChild(daudio);

2 个答案:

答案 0 :(得分:1)

这不会起作用,因为您在能够播放声音之前更新ended 3次。我建议您使用HTML5本机音频元素,并至少在mp3和ogg中准备好您的声音。

如果要按顺序播放数组的内容,可以使用var files = ['notibell_1.wav', 'notibell_2.wav', 'notibell_3.wav']; var i = 0; audio = new Audio(files[0]); //Let's add the ended event listener, //change the source and play it. audio.addEventListener('ended',function(){ if(++i < files.lenght){ audio.src = files[i]; audio.pause(); audio.load(); audio.play(); } else{ audio.pause(); } }); 事件侦听器重现下一个声音:

的Javascript

{{1}}

我还没有经过测试,但你可以得到这个想法

答案 1 :(得分:0)

您正在创建一个音频元素,分配所有属性,然后在循环中设置源,覆盖它2次。你的循环应该包含整个元素的创建和附加:

var files = ['notibell_1.wav', 'notibell_2.wav', 'notibell_3.wav'];

for (var i = 0; i < files.length; i++) {
    var daudio = document.createElement('embed');
    daudio.setAttribute('id', 'daudio');
    daudio.height = "50";
    daudio.width = "400";
    daudio.controls = true;
    daudio.autoplay = true;
    daudio.type = "audio/wav";
    daudio.src = files[i];
    bottom.appendChild(daudio);
}

现在所有3个音频文件同时播放。避免这种情况的一种简单方法是制作播放列表文件。 .m3u是一种简单的格式。制作另一个名为playlist.m3u的文件:

notibell_1.wav
notibell_2.wav
notibell_3.wav

然后只创建一个音频元素,将播放列表作为源:

var daudio = document.createElement('embed');
daudio.setAttribute('id', 'daudio');
daudio.height = "50";
daudio.width = "400";
daudio.controls = true;
daudio.autoplay = true;
daudio.type = "audio/wav";
daudio.src = 'playlist.m3u';
bottom.appendChild(daudio);