我是一个非常可怕的程序员,并且很少知道我要求的一半时间,所以请耐心等待我。寻找答案很困难,因为我不太清楚要搜索什么!
我有一个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项),单击“next”会将我带回到数组中的第二项并从那里继续。轨道选择功能是:
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!');
}
}
我必须为标题创建一个新数组,因为我无法在我的工作生涯中解析如何解析网址标题。 playlistTitle div已经存在,因为我正在进行一些非常复杂的“现在播放”曲目标题的切换。