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.mp3f.mp3songlistます。

ループの問題をどのように解決できますか?

4

1 に答える 1

6

曲が終了するたびに、別のイベントハンドラーを追加します。これが、イベントハンドラーの数が毎回2倍になるため、+ 1、+ 2、+4などが表示される理由です。

これが私が使用することを好む主な理由ですaudio.onended = function() {curr_track++; start();};

しかし、とにかく、これを修正するには、から始まる「isfirstrun」変数を用意しtrue、それがtrueの場合にのみイベントリスナーを追加してfalseに設定するだけです。

于 2012-12-31T00:28:10.213 に答える