На веб-странице на английском/тайском языке у меня есть четыре столбца английских фраз с соответствующими аудиофайлами. Фраза из каждого столбца выбирается щелчком мыши. После того, как были выбраны 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, аудиофайлы воспроизводятся в правильной последовательности. Я просмотрел предыдущие сообщения о секвенсе аудиофайлов, но я мог видеть что-либо непосредственно применимое. Любая помощь приветствуется.
Проблема в том, что вы не добавляете функцию в завершение события, вы вызываете ее немедленно. Ваш код:
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