2012-02-17 22 views
11

¿Cómo podríamos reproducir audio en html5 después de que otro haya terminado?Lista de reproducción de audio HTML5: ¿cómo reproducir un segundo archivo de audio después de que termine el primero?

He intentado con la función jquery delay() pero no funciona en absoluto, ¿es posible usar pause() en audio html5 con temporizador? Por ejemplo, pause('500',function(){});?

+0

Has probado esto: http://stackoverflow.com/questions/7652031/how-to-find-audio-is-paused-or-track-finished-in-jquery-html5-audio – Laszlo

+0

sí, que no por demora(), lo que quiero decir es ¿cómo podría el segundo archivo de audio reproducirse después de que termine el primero, –

Respuesta

12

Aquí hay una JSLinted, discreto Javascript ejemplo demostrando cómo manejar y utilizar el endedmediaevent. En su situación particular, activaría la reproducción del segundo archivo de audio en su controlador de eventos ended.

Puede usar el siguiente código o run the test fiddle.

Haga clic en un elemento de la lista de reproducción para comenzar la reproducción. Después de que termina un audio, comenzará el siguiente.

marcado: (nótese la evasión deliberada de espacios en blanco entre <li> elementos - esto es simplificar recorrer el DOM con 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> 

guión:

// 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); 
    } 
});​ 


​ 
+0

gracias Lloyd, ese hallazgo de trabajo, gracias, pero no estoy usando un hijo de música ul li, como un juego otomático en bakground (música de fondo para un pequeño juego) –

+0

esto no pretende ser una solución exacta para su problema (cómo puede ser, no sé nada sobre su juego) ... este es un ejemplo para demostrar el manejo del evento multimedia 'finalizado'; este evento se dispara cuando la reproducción ha finalizado.en el controlador para este evento, escriba un código para reproducir su segundo archivo de audio. – Lloyd

+0

respuesta actualizada para reflejar que es solo una demostración – Lloyd

0

Creo que esta respuesta le ayudará a ...

html5 audio player - jquery toggle click play/pause?

lo que en lugar de un clic se debe utilizar un setTimeout, setInterval o una, que cada vez se siente más cómodo con el que comprobar constantemente para el .paused==false Creo que es posible que pueda verificar si se completa verificando la longitud de los videos y compararlos con la duración máxima, que == fin del archivo.

+0

cómo hacemos que el audio se reproduzca después del primero? es eso posible? cuando termina el primer audio, ¿el segundo continúa reproduciéndose? –

+0

@Val ¿hay alguna ventaja al utilizar este método antes que responder al evento 'ended'? – Lloyd

+0

bueno, solo puedo ofrecer mi conocimiento :) No sabía sobre el evento finalizado. – Val

9

Si este es su etiqueta de audio :

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

y luego agregar un detector de eventos t o para el evento "finalizado" hará posible cambiar la fuente y reproducir tu próximo sonido.

var audio = document.getElementById("player"); 
audio.addEventListener("ended", function() { 
    audio.src = "nextAudio.mp3"; 
    audio.play(); 
}); 
1

Si utilizas Chrome se debe tener en cuenta que no s actualmente un error que no permite una etiqueta de audio para que se reproduzca. Para evitar esto puede restablecer el src o programáticamente solo crear un nuevo objeto Audio.

+0

realmente? Yo uso '

+0

creo que solo afecta a los clips cortos –

+0

buscándolo en la lista de errores de audio .. http://code.google.com/p/chromium/issues/list?can = 2 & q = función = Media-Audio & colspec = ID% 20Pri% 20Mstone% 20ReleaseBlock% 20Area% 20Feature% 20Status% 20Owner% 20Summary – Lloyd

Cuestiones relacionadas