Este método funciona:
audio.pause();
audio.currentTime = 0;
Pero si no desea tener que escribir estas dos líneas de código cada vez que detiene un audio, puede hacer una de dos cosas. El segundo creo que es el más apropiado y no estoy seguro de por qué los "dioses de los estándares de JavaScript" no han hecho este estándar.
Primer método: crear una función y pasar el audio
function stopAudio(audio) {
audio.pause();
audio.currentTime = 0;
}
//then using it:
stopAudio(audio);
Segundo método (preferido): ampliar la clase de audio:
Audio.prototype.stop = function() {
this.pause();
this.currentTime = 0;
};
Tengo esto en un archivo javascript que llamé "AudioPlus.js" que incluyo en mi html antes de cualquier script que se ocupe del audio.
Luego puede llamar a la función de parada en objetos de audio:
audio.stop();
FINALMENTE CROMO PROBLEMA CON "canplaythrough":
No he probado esto en todos los navegadores, pero este es un problema que encontré en Chrome. Si intenta establecer currentTime en un audio que tiene un detector de eventos "canplaythrough" adjunto, activará ese evento nuevamente, lo que puede generar resultados no deseados.
Entonces, la solución, similar a todos los casos en los que ha adjuntado un detector de eventos que realmente desea asegurarse de que no se vuelva a activar, es eliminar el detector de eventos después de la primera llamada. Algo como esto:
//note using jquery to attach the event. You can use plain javascript as well of course.
$(audio).on("canplaythrough", function() {
$(this).off("canplaythrough");
// rest of the code ...
});
PRIMA:
Tenga en cuenta que puede agregar aún más métodos personalizados a la clase de audio (o cualquier clase nativa de JavaScript para el caso).
Por ejemplo, si deseaba un método de "reinicio" que reiniciara el audio, podría verse así:
Audio.prototype.restart= function() {
this.pause();
this.currentTime = 0;
this.play();
};