我已经创建了一个javascript来在音频结束后更改音频.
var songlist = new Array("a.mp3", "b.mp3", "c.mp3", "d.mp3", "e.mp3", "f.mp3");
var dir = "music/";
var curr_track = 0;
var isfirstrun;
function start()
{
if(curr_track == songlist.length)
curr_track = 0;
var track = document.getElementById('track');
track.innerHTML = curr_track;
var audio = document.getElementById('audio');
isfirstrun = true;
audio.src = dir+songlist[curr_track];
audio.load();
audio.play();
if(isfirstrun == true)
{
audio.addEventListener('ended', function(){ curr_track++; start();}, false);
isfirstrun = false;
}
}
Run Code Online (Sandbox Code Playgroud)
在HTML中,
<body onload="start();">
Run Code Online (Sandbox Code Playgroud)
在track
代码中使用是要表明什么是当前曲目编号,并且我发现输出
0 then 1 then 3 then 7
Run Code Online (Sandbox Code Playgroud)
因此,它是缺失的c.mp3
,e.mp3
并且f.mp3
来自songlist
.
如何解决循环问题?
每次歌曲结束时,您都会添加另一个事件处理程序.这就是为什么你看到+ 1,+ 2,+ 4等等,因为事件处理程序的数量每次都会增加一倍.
这是我喜欢使用的主要原因 audio.onended = function() {curr_track++; start();};
但无论如何,要解决这个问题,你只需要有一个"isfirstrun"变量,从那里开始true
,然后只添加事件监听器(如果为真)并将其设置为false.