0

我是一个非常糟糕的程序员,对我一半时间问的内容知之甚少,所以请多多包涵。搜索这个问题的答案很困难,因为我不太清楚要搜索什么!

我有一个 javascript 函数,可以播放数组中的下一首曲目(我相信这段代码现在看起来很熟悉!):

function loadPlayer() {
    var audioPlayer = new Audio();
    audioPlayer.controls=false;
    audioPlayer.preload="auto";
    audioPlayer.addEventListener('ended',nextSong,false);
    audioPlayer.addEventListener('error',errorFallback,true);
    audioPlayer.addEventListener('timeupdate',updateProgress, false);
    document.getElementById("player").appendChild(audioPlayer);
    nextSong();
}

function nextSong() {
    if(urls[next]!=undefined) {
        var audioPlayer = document.getElementsByTagName('audio')[0];
        if(audioPlayer!=undefined) {
            audioPlayer.src=urls[next];
            audioPlayer.load();
            audioPlayer.play();
            next++;
        } else {
            loadPlayer();
        }
    } else {
        alert('file missing!');
    }
}
function errorFallback() {
        nextSong();
}

当我通过以下方式调用函数时,这有效:

<a href="#" onclick="nextSong()">Next!</a>

但是,如果我通过 pickSong 函数在数组中选择一个项目(比如项目 4),单击“下一步”会将我带回数组中的第二个项目并从那里继续。曲目选择功能为:

function pickSong(num) {
    next = num;
    nextSong();
}

var urls = new Array();
    urls[0] = '01_horses_mouth/mp3/01. Let The Dog See The Rabbit preface.mp3';
    urls[1] = '01_horses_mouth/mp3/02. The Other Horse\'s Tale.mp3';
    urls[2] = '01_horses_mouth/mp3/03. Caged Tango.mp3';
    urls[3] = '01_horses_mouth/mp3/04. Crumbs.mp3';

var next = 0;

我错过了什么?

编辑:我似乎已经解决了它(虽然它可能一开始就有效,但现在效果更好):

function nextSong() {
    if(urls[next]!=undefined) {
        var audioPlayer = document.getElementsByTagName('audio')[0];
        if(audioPlayer!=undefined) {
            audioPlayer.src=urls[next];
            audioPlayer.load();
            audioPlayer.play();
            $('#playlistTitle').html(trackTitles[next++]);
        } else {
            loadPlayer();
        }
    } else {
        alert('file missing!');
    }
}

我不得不为标题创建一个新数组,因为我一生都无法弄清楚如何解析 url 标题。playlistTitle div 已经存在,因为我正在做一些非常复杂的切换“正在播放”的曲目标题。

4

0 回答 0