Comunidad de diseño web y desarrollo en internet online

Botón siguiente en la etiqueta audio con javascript

Citar            
MensajeEscrito el 20 May 2011 09:11 am
Hola a todos,

Estoy iniciandome en javascript y quiero hacer un reproductor de canciones web que funcione en cualquier navegador moderno.

Para ello estaba utilizando la etiqueta audio y mi intención era fabricarle las opciones adicionales con javascript para poder cambiar de canción entre otras. Pero hay algo que se me pasa por alto (presupongo que tengo que recargar el reproductor, o algo así, pero no se como...)

Mi código es este:

<body>
<script>
var i=0;
var songs= new Array();
songs[0]= "MayaFilipic/07-Fantasia.mp3"
songs[1]= "WoodenLegs/07-Horizon.mp3"
function reproductor(i){
document.write("<audio src='../Music/"+songs[i]+ "' controls='controls'></audio>")}
function next(){
i=i++;}
</script>
<div id='reproductor'>
<script>
reproductor(i)
document.write("<br><input name='message' type='button' value='Next' onclick='(1)'>")
document.write("<input name='songs[i]' type='text' size=30 value="+songs[i]+"><br>")
</script>
</div>
</body>

¿Alguien puede decirme como conseguir que al incrementar la variable 'i' la etiqueta audio se recargue con el nuevo valor?

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome
Citar            
MensajeEscrito el 20 May 2011 09:41 am
Hola, no es que tenga mucha experiencia en este tema, pero me gustaria ayudar.
En el onclick no llamas a la función puede ser el problema.
Prueba a poner <input name='message' type='button' value='Next' onclick='next()'>
aunque despues de incrementar la i tambien deberiamos volver a pasarla como atributo a la funcion reproductor(). Opino que sí, deberias recargar la pagina de nuevo, o tal vez, baste con volver a llamar a la funcion reproductor().

Intenta añadir en el evento esto: onclick='reproductor(next())';

Son ideas, repito que tampoco tengo mucha experiencia. Espero que solucione tu problema.
Un saludo

Por nori89

10 de clabLevel



 

Tecnico en Sistemas

firefox
Citar            
MensajeEscrito el 20 May 2011 10:45 am
Buenas,
usa setInterval

Por neisserian89

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 May 2011 10:53 am
Muchas gracias, ahora si que me cambia de canción, pero el problema es que recarga otra vez la página entera y solo sale el reproductor, ¿sabrías como hacer para que no se borrase el resto de la página?

PD:(Al final he puesto onclick='reproductor(i+=1)'; y he eliminado la función next)

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome
Citar            
MensajeEscrito el 20 May 2011 11:01 am

neisserian89 escribió:

Buenas,
usa setInterval


He estado mirando lo de setInterval y setTimeout y por lo visto funcionan la primera cada X tiempo y la otra solo una vez al X tiempo, por lo que no me valdrían ya que las canciones cada una tiene un tiempo diferente y la idea es que el programa acabe teniendo muchas canciones y que se pudieran pausar sin que el tiempo del setInterval te hiciera pasar a la siguiente al rato...

¿O hay alguna forma de sincronizar el setInterval con el tiempo que queda de canción?

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome
Citar            
MensajeEscrito el 20 May 2011 11:14 am
Hola,
prueba a poner dentro de tu funcion reproductor() el resto de "document.write"

siguiendo tu codigo deberia quedar asi la función:

Código :

function reproductor(i){
document.write("<audio src='../Music/"+songs[i]+ "' controls='controls'></audio>")
document.write("<br><input name='message' type='button' value='Next' onclick='(1)'>")
document.write("<input name='songs[i]' type='text' size=30 value="+songs[i]+"><br>") 
}

Por nori89

10 de clabLevel



 

Tecnico en Sistemas

firefox
Citar            
MensajeEscrito el 20 May 2011 11:25 am

nori89 escribió:

Hola,
prueba a poner dentro de tu funcion reproductor() el resto de "document.write"

siguiendo tu codigo deberia quedar asi la función:

Código :

function reproductor(i){
document.write("<audio src='../Music/"+songs[i]+ "' controls='controls'></audio>")
document.write("<br><input name='message' type='button' value='Next' onclick='(1)'>")
document.write("<input name='songs[i]' type='text' size=30 value="+songs[i]+"><br>") 
}


Funciona genial, pasa de canción y se mantiene tanto el botón como el nombre de la canción (que cambia, pero el cuadro se mantiene, como tiene que ser) Pero sigue desapareciendo todo lo que esta fuera de la función. ¿Hay alguna forma de aislar ese div o algo así para que solo le afecte el botón a el mismo?

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome
Citar            
MensajeEscrito el 20 May 2011 11:38 am
Uhm.. creo que eso ya es tema de AJAX y aun no lo domino...
Una pregunta, tienes el resto del codigo metido en script tambien? o es HTML? porque si es HTML no deberia desaparecer.
Si lo tienes dentro del script sácalo fuera y prueba.

Por nori89

10 de clabLevel



 

Tecnico en Sistemas

firefox
Citar            
MensajeEscrito el 20 May 2011 12:11 pm

nori89 escribió:

Uhm.. creo que eso ya es tema de AJAX y aun no lo domino...
Una pregunta, tienes el resto del codigo metido en script tambien? o es HTML? porque si es HTML no deberia desaparecer.
Si lo tienes dentro del script sácalo fuera y prueba.


Lo he revisado y ha sido fallo mio, había puesto onclick='reproductor(i+=1)'; dentro de la función, por lo que al pulsar el boton se llamaba a si misma y por eso desaparecia lo demás... Pero ahora, quitando esa parte ha dejado de funcionar otra vez... No pasa nada al pulsar el boton, el codigo por ahora es:

<script>
var songs= new Array();
songs[0]= "MayaFilipic/07-Fantasia.mp3"
songs[1]= "WoodenLegs/07-Horizon.mp3"
function reproductor(){
var i=0;
document.write("<audio src='../Music/"+songs[i]+ "' controls='controls'></audio>")
document.write("<br><input name='message' type='button' value='Next' onclick='(i+=1)';>")
document.write("<input name='songs[i]' type='text' size=30 value="+songs[i]+"><br>")}
</script>

¿Qué hago mal?

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome
Citar            
MensajeEscrito el 20 May 2011 01:13 pm
Vale, no he encontrado del todo el fallo en mi código, pero lo he intentado de otra forma y funciona, por si a alguien le interesa, he vuelto a crear la función next pero usando el document.getElementById y el código me ha quedado tal que así:

<script>
var i=0;
var songs= new Array();
songs[0]= "MayaFilipic/07-Fantasia.mp3"
songs[1]= "WoodenLegs/07-Horizon.mp3"
function reproductor(){

document.write("<audio id='song' src='../Music/"+songs[i]+ "' controls='controls'></audio>")
document.write("<br><input name='message' type='button' value='Next' onclick='javascript:next()';>")
document.write("<input id='songName' name='songs[i]' type='text' size=30 value="+songs[i]+"><br>")
}

function next()
{
i++;
document.getElementById('song').src = '../Music/' + songs[i];
document.getElementById('songName').value = songs[i];
}
</script>

Funciona perfectamente y sin hacer extraños. Gracias a todos por vuestra ayuda y paciencia.

Por Sarlit

8 de clabLevel



 

Mal intento de webmaster...

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.