javascript - 当手动选择当前歌曲时,我的 JavaScript mp3 播放器无法播放下一首歌曲

标签 javascript html

我正在制作一个 JavaScript MP3 播放器并遵循在线教程。我自己添加了一些东西,比如可以单击来播放的 MP3 文件列表。整个事情工作正常,直到我手动选择 MP3 文件并且歌曲结束或者我单击下一首(或上一首),因为它不会加载下一首歌曲(如果您不手动单击歌曲,这确实有效) .)

我收到以下错误:

Uncaught TypeError: Cannot read property 'substr' of undefined
    at loadSong (player.js:20)
    at next (player.js:76)
    at HTMLElement.onclick (VM4443 :88)

我认为这与loadSong(id)中给出的参数有关。代码如下(不需要的代码已被省略),提前感谢您的帮助!

var songs = ["Bloed Voor De Kunst.mp3",
            "Iemand Moet Het Doen.mp3"];

var songTitle = document.getElementById('songTitle');
var songList = document.getElementById('songList');
var arrayLength = songs.length-1;

var song = new Audio();
var currentSong = 0;

function loadSong(id) {
    currentSong = id;
    song.src = "mp3/" + songs[currentSong]; 
    var title = songs[currentSong];
    var trim = title.substr(0, title.length-4);
    songTitle.textContent = trim;
    song.volume = volumeSlider.value;
    song.play();
    setTimeout(showDuration, 1000);
    document.getElementById('playpause').setAttribute('onclick','songPlayPause()');
    document.getElementById('playpause').setAttribute('class','far fa-pause-circle');
    console.log(currentSong);
    console.log(arrayLength);
}

function updateSongSlider() {
    var c = Math.round(song.currentTime);
    songSlider.value = c;
    currentTime.textContent = convertTime(c);
    if(song.ended) {
        next();
    }
}

function next() {
    var current = currentSong;
    if(current !== arrayLength) {
        currentSong = currentSong + 1;      
    }
    else {
        currentSong = 0;
    }
    loadSong(currentSong);

}

function getSongList() {
    for(var i=0; i < songs.length; i++) {
        var title = songs[i];
        var trim = title.substr(0, title.length-4);
        var playbutton = "<i class='far fa-play-circle' onClick=loadSong('" + i + "')></i>";
        document.getElementById('songList').innerHTML += "<li>" + playbutton + "<p>" + trim + "</p></li>";
    }
}

最佳答案

看起来您的数组 songs 目前不包含与键 id 相关的歌曲。因此 id 不是一个好的值。

在您的条件current !== arrayLengthcurrent,因为它的最大值可能是一个字符串“1”,这并不完全是等于数字1,因此它进入条件并进行加法,结果得到错误的值。

更改:

function next() {
    var current = currentSong;
    if(current !== arrayLength) {
        currentSong = currentSong + 1;      
    }
    else {
        currentSong = 0;
    }
    loadSong(currentSong);

}

致:

function next() {
        var current = parseInt(currentSong);
        if(current < arrayLength) {
            currentSong = currentSong + 1;      
        }
        else {
            currentSong = 0;
        }
        loadSong(currentSong);
    }

关于javascript - 当手动选择当前歌曲时,我的 JavaScript mp3 播放器无法播放下一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908471/

相关文章:

javascript - jQuery 文件上传预览/删除图像无法正常工作

html - 为什么不 margin : auto 0px; vertically center a block as margin: 0px auto; horizontally centers it?

javascript - JavaScript 数组长度的错误表示

javascript - 添加脚本引用后 HTML 不显示

javascript - 我有清除输入文本宽度 jQuery 的问题

javascript - 如何在react组件中使用现有的javascript代码

html - 如何为可访问性和 SEO 正确注释文章/博客文章预览的内容?

javascript - 从下拉菜单中过滤网页内容的最简单方法是什么?

javascript - 如何完美计算 `children' s`的高度

javascript - 通过 html5 javascript 在客户端加密数据