Javascript audiofile“上一个/下一个”文件/歌曲跳过功能?

时间:2015-11-28 09:26:59

标签: javascript html angularjs

我创造了一个简单的音乐播放器。

按预期播放,暂停和停止所有工作。

但是,我无法弄清楚如何使函数在文件之间向前或向后跳过。

JS:

这是小部件其余部分的支持代码。

  var songs = ["violin", "stronger", "boom"]
  var songIndex = 1;
  var currentSong = new Audio("music/" + songs[songIndex] + ".mp3")
  $scope.playStatus = true;

这只是简单地切换游戏与暂停:

  $scope.playPause = function() {
    if (!$scope.playStatus) currentSong.pause();
    else currentSong.play();
    $scope.playStatus = !$scope.playStatus;
  }

这会完全停止歌曲并将其返回到开头:

  $scope.stopSong = function() {
    currentSong.pause();
    currentSong.currentTime = 0;
    $scope.playStatus = true;
  }

这是我尝试创建“上一首歌”功能的地方:

  $scope.previousSong = function() {
    currentSong.pause()
    if (songIndex === 0) {
      songIndex = songs.length;
    } else {
      songIndex -= 1;
    }
    currentSong.play()
    $scope.playStatus = true;
  }

最后一个函数是我期望最简单的逻辑。

暂停歌曲,向后移动歌曲阵列中的一个索引,然后播放。然而,它只是继续播放同一首歌。没有错误。

2 个答案:

答案 0 :(得分:2)

这是因为你没有加载正确的mp3。尝试像

这样的东西
  $scope.previousSong = function() {
    currentSong.pause()
    if (songIndex === 0) {
      songIndex = songs.length - 1;
    } else {
      songIndex -= 1;
    }
    currentSong = new Audio("music/" + songs[songIndex] + ".mp3"); // reload the new song
    currentSong.play();
    $scope.playStatus = true;
  }

答案 1 :(得分:1)

我在您的代码中发现了两个错误:

  • var songIndex = 1应为var songIndex = 0(您想从头开始)
  • songIndex = songs.length;应为songIndex = songs.length - 1;(索引等于数组的长度超出界限)