Con Javascript, tengo una función que crea un elemento de audio con createElement("audio")
, y comienzo a jugar en loop sin usar appendChild()
, quiero decir sin agregarlo al DOM. El elemento creado se guarda en una variable, vamos a lo llamaron music1
:¿Cómo elimino correctamente el audio html5 sin agregar a DOM?
music = document.createElement("audio");
music.addEventListener("loadeddata", function() {
music.play();
});
music.setAttribute("src", music_Source);
Lo que me gustaría hacer, es cambiar la música que se reproduce, si es posible utilizar la misma función, y almacenar el elemento de la misma variable.
Lo que hago es que antes de que el código anterior:
if(typeof(music) == "object") {
music.pause();
music = null;
}
Pero: si quito music.pause()
, la primera música sigue sonando, y el segundo comienza a jugar demasiado al mismo tiempo, lo que me hace pensar que la primera música está siempre en algún lugar del documento/en la memoria. Además, music = null
parece inútil. No quiero usar jQuery.
¿Tiene alguna idea de eliminar correctamente la primera música, eliminar el elemento, etc.?
En realidad, el comentario de kennis es correcto, intenté simplemente cambiar el atributo src, y no modificar la variable "música" (ni establecerlo en nulo, ni volver a crear un elemento) y parece que también funciona. Por lo tanto, para el registro: Para cambiar aquí cada fuente es la función:
if(typeof(music) != "object") {
//audio element does not exist yet:
music = document.createElement("audio");
music.addEventListener("loadeddata", function() {
music.play();
});
}
music.setAttribute("src", music_Source);
¡Ya ha respondido su pregunta! 'music.pause()' antes de eliminar el objeto. –
¿Hay alguna razón por la que no desee simplemente cambiar el atributo 'src' cuando esté listo para comenzar la nueva canción? –
@kennis En realidad, 'music.setAttribute (" src ", music_Source);' se llama de nuevo con la nueva music_Source para la segunda música, así que supongo que eso es lo que quiere decir, cambio el atributo src. @Francis Avila Pero no estoy realmente convencido de que music.pause() antes de borrar permita que la música anterior sea "eliminada" de la manera adecuada. O tal vez extraño algo, o no me explico lo suficiente :) –