@Janjabuja

Как запускать воспроизведение аудио только тогда, когда предыдущий звук был проигран полностью?

Есть такой код. Он запускает поочереди звуки. Как сделать так, чтобы если я снова запускаю эту функцию, то пока предыдущий треклист не проиграл полностью следующий не запустится?

var audio = new Audio();
audio.onended = function(e)
{
  var target = e.target;
  var cur_src = target.getAttribute('src');
  switch(cur_src)
  {
     case '1.mp3': target.setAttribute('src', '2.mp3'); break;
     case '2.mp3': target.setAttribute('src', '3.mp3'); break;
     case '3.mp3': target.setAttribute('src', '1.mp3'); break;
  }
  target.play();
};
audio.setAttribute('src', '1.mp3');
audio.autoplay = true;
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Сделайте очередь:

const
  audio = new Audio(),
  queue = []

audio.onended = function() {
  if (queue.length) {
    audio.src = queue.shift()
    audio.play()
  }
}

function play(srcArray) {
  queue.push(...srcArray)

  if (audio.paused) {
    audio.onended()
  }
}

play([ '1.mp3', '2.mp3', '3.mp3' ])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы