0

我创建了一个 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;
    }
}

在 HTML 内部,

<body onload="start();">

代码中track使用的是显示当前轨道号是什么,我发现输出是

0    then    1    then     3     then    7

因此,它缺少c.mp3e.mp3并且f.mp3来自songlist

如何解决循环问题?

4

1 回答 1

6

每次歌曲结束时,您都在添加另一个事件处理程序。这就是为什么您会看到 +1、+2、+4 等,因为事件处理程序的数量每次都会翻倍。

这是我喜欢使用的主要原因audio.onended = function() {curr_track++; start();};

但无论如何,要解决这个问题,您所要做的就是拥有一个“isfirstrun”变量,从 开始true,然后仅在它为 true 时添加事件侦听器并将其设置为 false。

于 2012-12-31T00:28:10.213 回答