我是一个非常糟糕的程序员,对我一半时间问的内容知之甚少,所以请多多包涵。搜索这个问题的答案很困难,因为我不太清楚要搜索什么!
我有一个 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 已经存在,因为我正在做一些非常复杂的切换“正在播放”的曲目标题。