HTML-аудио плеер Javascript зацикливается непреднамеренно

Я использую ссылку JavaScript, расположенную в <head> раздел моего сайта WP. Это очень просто и работает хорошо, за исключением случая, когда проигрыватель заканчивает последний трек - он начинает воспроизводить первый трек снова.

Я пытался использовать loop="false" но он запускает другую ошибку, перезапуская ту же самую последнюю дорожку. Я не знаком с кодированием JavaScript, но я думаю, что должно быть возможно создать класс, что-то вроде class="last-song" и поиграй с этим.

Пример можно увидеть здесь, где HTML может быть проверен:

Javascript можно найти здесь

Я был бы очень признателен, если бы кто-то мог получить некоторую помощь.

2 ответа

        $("#audioPlayer")[0].src = $("#playlist li a")[currentSong].href;
        $("#audioPlayer")[0].play();

это говорит, что играть первым в последовательности массива

Меня смущает утверждение if, так как оно, похоже, ничего не делает

if(currentSong == $("#playlist li a").length)

поскольку нет фигурных скобок {}, чтобы указать, что нужно делать с IF и ELSE

function audioPlayer(){
var currentSong = 0;
$("#audioPlayer")[0].src = $("#playlist li a")[0];
$("#audioPlayer")[0].play();
$("#playlist li a").click(function(e){
    e.preventDefault(); 
    $("#audioPlayer")[0].src = this;
    $("#audioPlayer")[0].play();
    $("#playlist li").removeClass("current-song");
    currentSong = $(this).parent().index();
    $(this).parent().addClass("current-song");
});

$("#audioPlayer")[0].addEventListener("ended", function(){
    currentSong++;
    if(currentSong == $("#playlist li a").length){
        currentSong = 0;
        $("#audioPlayer")[0].src = $("#playlist li a")[currentSong].href;
        $("#audioPlayer")[0].pause();
    }else{
        $("#audioPlayer")[0].src = $("#playlist li a")[currentSong].href;
        $("#audioPlayer")[0].play();
    }
    $("#playlist li").removeClass("current-song");
    $("#playlist li:eq("+currentSong+")").addClass("current-song");
}
);
}

Ваш код

$("#audioPlayer")[0].addEventListener("ended", function(){
currentSong++;
if(currentSong == $("#playlist li a").length)
currentSong = 0;
$("#playlist li").removeClass("current-song");
$("#playlist li:eq("+currentSong+")").addClass("current-song");
$("#audioPlayer")[0].src = $("#playlist li a")[currentSong].href;
$("#audioPlayer")[0].play();
});
}

когда вы устанавливаете currentSong = 0; после вашего if(currentSong... Скажите, что вы говорите это петле По сути, вы сбрасываете его обратно к первой песне в массиве каждый раз, когда он достигает конца.

Если вы изменили это на что-то вроде:

if (currentSong == $("#playlist li a").length) {
    $("#audioPlayer")[0].pause() // maybe .stop()
    // Do more stuff here for your UI
}

Похоже, что вы ничего не могли сделать (просто закомментируйте currentSong = 0 линия). Например:

$("#audioPlayer")[0].addEventListener("ended", function(){
    currentSong++;
    if(currentSong == $("#playlist li a").length)
    //currentSong = 0;
    $("#playlist li").removeClass("current-song");
    $("#playlist li:eq("+currentSong+")").addClass("current-song");
    $("#audioPlayer")[0].src = $("#playlist li a")[currentSong].href;
    $("#audioPlayer")[0].play();
});
Другие вопросы по тегам