Аудио-плейлист HTML5 – как воспроизвести второй аудиофайл после окончания первого?

Как мы могли бы воспроизвести какой-то звук в html5 после того, как закончился другой?

Я пробовал использовать функцию jquery delay(), но она вообще не будет работать, возможно ли вместо этого использовать pause() в аудио html5 с таймером? Например, pause('500',function(){});?


person Khairu Aqsara    schedule 17.02.2012    source источник
comment
Вы пробовали это: stackoverflow.com/questions/7652031/   -  person Laszlo    schedule 17.02.2012
comment
да, это не для задержки (), я имею в виду, как второй аудиофайл может воспроизводиться после окончания первого,   -  person Khairu Aqsara    schedule 17.02.2012


Ответы (3)


Вот JSLinted, ненавязчивый Javascript пример, демонстрирующий, как обрабатывать и использовать ended mediaevent . В вашей конкретной ситуации вы должны запустить воспроизведение второго аудиофайла в обработчике событий ended.

Вы можете использовать приведенный ниже код или запустить тестовую скрипту.

Щелкните элемент в списке воспроизведения, чтобы начать воспроизведение. После окончания одного аудио начнется следующее.

разметка: (обратите внимание на намеренное избегание пробелов между элементами <li> — это упрощает обход DOM с помощью nextSibling.)

<audio id="player"></audio>

<ul id="playlist"><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%201%20by%20Lionel%20Allorge.ogg">Space 1</li><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%202%20by%20Lionel%20Allorge.ogg">Space 2</li><li data-ogg="http://www.lunerouge.org/sons/sf/LRWeird%203%20by%20Lionel%20Allorge.ogg">Space Lab</li></ul>

<button id="stop">Stop</button>

сценарий:

// globals
var _player = document.getElementById("player"),
    _playlist = document.getElementById("playlist"),
    _stop = document.getElementById("stop");

// functions
function playlistItemClick(clickedElement) {
    var selected = _playlist.querySelector(".selected");
    if (selected) {
        selected.classList.remove("selected");
    }
    clickedElement.classList.add("selected");

    _player.src = clickedElement.getAttribute("data-ogg");
    _player.play();
}

function playNext() {
    var selected = _playlist.querySelector("li.selected");
    if (selected && selected.nextSibling) {
        playlistItemClick(selected.nextSibling);
    }
}

// event listeners
_stop.addEventListener("click", function () {
    _player.pause();
});
_player.addEventListener("ended", playNext);
_playlist.addEventListener("click", function (e) {
    if (e.target && e.target.nodeName === "LI") {
        playlistItemClick(e.target);
    }
});​


​
person Lloyd    schedule 17.02.2012
comment
спасибо, Ллойд, это рабочая находка, спасибо, но я не использую детский элементный дом ul li, это похоже на отоматику, играющую в пекарне (фоновая музыка для какой-то маленькой игры) - person Khairu Aqsara; 19.02.2012
comment
это не предназначено для точного решения вашей проблемы (как это может быть, я ничего не знаю о вашей игре).. это пример, демонстрирующий обработку события мультимедиа ended - это событие срабатывает, когда воспроизведение закончилось.. в обработчик этого события, напишите код для воспроизведения второго аудиофайла. - person Lloyd; 19.02.2012
comment
спасибо, наконец-то это решило мою проблему, используя ваш код, проясните ситуацию, спасибо, чувак - person Khairu Aqsara; 19.02.2012

Если это ваш аудиотег:

<audio id="player" src="someAudio.mp3"/>

затем добавление к нему прослушивателя событий для «завершенного» события позволит изменить источник и воспроизвести следующий звук.

var audio = document.getElementById("player");
audio.addEventListener("ended", function() {
    audio.src = "nextAudio.mp3";
    audio.play();
});
person Emil H    schedule 19.02.2012

Я думаю, что этот ответ поможет вам...

аудиоплеер html5 - jquery переключает воспроизведение/паузу щелчком мыши?

поэтому вместо клика вы должны использовать setTimeout или setInterval, в зависимости от того, что вам удобнее, чтобы постоянно проверять наличие .paused==false. Я думаю, вы могли бы проверить, завершено ли оно, проверив длину видео и сравнив ее с максимальной длиной , что == конец файла.

person Val    schedule 17.02.2012
comment
как сделать так, чтобы звук проигрывался после первого? это возможно? когда первый звук заканчивается, второй продолжает играть? - person Khairu Aqsara; 17.02.2012
comment
@Val Есть ли какое-либо преимущество в использовании этого метода по сравнению с реакцией на событие ended? - person Lloyd; 21.02.2012
comment
ну, я могу только предложить свои знания :) Я не знал о закончившемся мероприятии. - person Val; 21.02.2012