开发者问题收集

我的点唱机应用程序在循环播放完所有歌曲后崩溃

2017-07-24
76

我的点唱机应用程序在播放完播放列表中的所有歌曲后不会重新开始。相反,它会停止所有功能。到目前为止,它可以播放、暂停、停止、返回和下一首。当它播放完最后一首歌曲后,我点击“下一首”,什么也没发生,其他功能也不起作用。

Jukebox.prototype.next = function() {
  this.jamz[index].pause();
  index++
  this.jamz[index].currentTime = 0;
  this.jamz[index].play();
  if (index == this.jamz.length) {
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();
  }
}

Jukebox.prototype.back = function() {
  this.jamz[index].pause();
  index--
  this.jamz[index].currentTime = 0;
  this.jamz[index].play();
  if (index == 0) {
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();
  }
}

这是在播放完最后一首歌曲之前运行完美的代码。我试图让它回到 jamz 数组中的第一首歌曲,其中包含我的所有音乐。

我的控制台中的错误似乎是;

Uncaught TypeError:无法在 Jukebox.next (script.js:55) 上设置未定义的属性“currentTime”

3个回答

您可以尝试重新排序代码以检查您是否已到达播放列表的末尾 - 否则您将收到一个 javascript 错误并且它将停止您的程序,即:

Jukebox.prototype.next = function() {
    this.jamz[index].pause();
    if (index == this.jamz.length-1) {
        index=0;
    } else {
        index++;
    }
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();  
}

Jukebox.prototype.back = function() {
    this.jamz[index].pause();
    if (index == 0) {
        // rotate back from first track to last track
        index = this.jamz.length-1;  
    } else {
        index--;
    }
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();  
}
Myke Black
2017-07-24

我认为在调用 this.jamz[index].play() 之前,您必须检查索引是否超出 0 到 jamz.length - 1 的范围

huydq5000
2017-07-24

js 中的列表索引为 0,这意味着列表中的最后一项具有索引 list.length-1
对于您的情况,您需要将 index == this.jamz.length 更改为 index == this.jamz.length-1 。此外,为了保险起见,如果可以的话,您永远都不要使用 == 。js 中的 == 运算符与其他语言中的 == 运算符不同。您想使用 === 运算符。

Jukebox.prototype.next = function() {
  this.jamz[index].pause();
  index++
  this.jamz[index].currentTime = 0;
  this.jamz[index].play();
  if (index === this.jamz.length-1) {
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();
  }
}

Jukebox.prototype.back = function() {
  this.jamz[index].pause();
  index--
  this.jamz[index].currentTime = 0;
  this.jamz[index].play();
  if (index === 0) {
    this.jamz[index].currentTime = 0;
    this.jamz[index].play();
  }
}
Olian04
2017-07-24