воспроизведение аудио файлов последовательно не работает

0

На веб-странице на английском/тайском языке у меня есть четыре столбца английских фраз с соответствующими аудиофайлами. Фраза из каждого столбца выбирается щелчком мыши. После того, как были выбраны 4 фразы, я хочу, чтобы их аудиофайлы воспроизводились последовательно. Вот 1 из 4 сегментов кода, делающих выбор (они отличаются только выбором html-тегов и локальными хранилищами).

var audioIsPlaying = false;

jQuery("div#wh_set1").on("click", "p span", function (evnt) {      
  var elementId = evnt.target.id,
  word1 = jQuery(this).text();
  jQuery("span#word1").html(word1);                
    var pathVar = document.getElementById("pathVar").innerHTML,
       oggVar = pathVar+elementId+".ogg",
       mp3Var = pathVar+elementId+".mp3";
       if(Modernizr.audio.ogg) {
         localStorage.setItem("wh_set1", oggVar);
      }else {
        localStorage.setItem("wh_set1", mp3Var);
    }
 });

Последовательное воспроизведение аудиофайлов предназначено для обработки следующим кодом:

var currentAudio  = document.createElement('audio'),  i ;  
function audioPlay(i)  {
  audioIsPlaying = false;
  currentAudio.setAttribute("src", localStorage.getItem('wh_set' + i));
  currentAudio.load();
  currentAudio.play();
  audioIsPlaying = true;
//    alert("wh_set" +i);                                                        
}
for(i = 1; i <= 4; i++) {
  currentAudio.addEventListener("ended", audioPlay(i));
}  

Но это не работает должным образом. Воспроизводится только аудиофайл последней из 4 выбранных фраз. Если предупреждение разоблачено, каждый выбор воспроизводится в правильной последовательности. Аналогичным образом, если код выполняется с помощью Firebug, аудиофайлы воспроизводятся в правильной последовательности. Я просмотрел предыдущие сообщения о секвенсе аудиофайлов, но я мог видеть что-либо непосредственно применимое. Любая помощь приветствуется.

Теги:
audio

1 ответ

0
Лучший ответ

Проблема в том, что вы не добавляете функцию в завершение события, вы вызываете ее немедленно. Ваш код:

audioPlay(1);
audioPlay(2);
audioPlay(3);
audioPlay(4);

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

Я заменил

for(i = 1; i <= 4; i++) {
  currentAudio.addEventListener("ended", audioPlay(i));
}  

в

 var i = 1;
    currentAudio.addEventListener( "ended", function() {
      i++;
      if ( i < 5 ) {
        audioPlay( i );
      }
    } );
  audioPlay( 1 );

и он отлично работает в Chrome и Firefox

  • 0
    Привет Василий, как вы говорите, это работает отлично. Это здорово, большое спасибо.
  • 0
    Пожалуйста, прости орфографическую ошибку.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню