Foros del Web » Programando para Internet » Javascript »

Problema con script

Estas en el tema de Problema con script en el foro de Javascript en Foros del Web. Hice este código con la idea de que la primera vez seleccione una imagen al azar entre varias y luego, cada 5 segundos cambie de ...
  #1 (permalink)  
Antiguo 28/07/2003, 03:18
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Problema con script

Hice este código con la idea de que la primera vez seleccione una imagen al azar entre varias y luego, cada 5 segundos cambie de imagen tambien de una forma aleatoria entre esas imágenes. La primera carga se hace bien y tambien la segunda, pero ya no selecciona la tercera imagen y no entiendo por qué.
¿Alguien puede ayudarme?
Muchísimas gracias, un saludo

<script language="javascript">
<!--
function VecImagenes()
{
n=0;
this[n++]="paginas/fotos/imagen1.jpg alt='imagen 1 \n\251 autor 1' ";
this[n++]="paginas/fotos/imagen2.jpg alt='imagen 2 \n\251 autor 2' ";
this[n++]="paginas/fotos/imagen3.jpg alt='imagen 3 \n\251 autor 3' ";
this[n++]="paginas/fotos/imagen4.jpg alt='imagen 4 \n\251 autor 4' ";
this[n++]="paginas/fotos/imagen5.jpg alt='imagen 5 \n\251 autor 5' ";
this[n++]="paginas/fotos/imagen6.jpg alt='imagen 6 \n\251 autor 6' "
this.N=n;
}
var Imagenes=new VecImagenes();
src= Imagenes[ Math.floor(Math.random() * Imagenes.N) ] ;
document.write("<a href="+src+" target='_blank'><IMG SRC="+src+" width=186 height=279>");
id=setInterval("repetir()",5000);

function repetir()
{
VecImagenes()
src= Imagenes[ Math.floor(Math.random() * Imagenes.N) ] ;
document.write("<a href="+src+" target='_blank'><IMG SRC="+src+" width=186 height=279>");
}
//-->
</script>
  #2 (permalink)  
Antiguo 28/07/2003, 15:13
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Fijate en este enlace

http://clickpe.7host.com/greencard/

Saludos
  #3 (permalink)  
Antiguo 28/07/2003, 15:25
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Hola Morta.

Lo que yo veo que esta raro es el uso que haces del document.write().

Cuando la página se carga inicialmente en el navegador, es el momento apropiado para agragar líneas al programa usando el write() de JavaScript, pero una vez cargada, ya es inutil usar el comando a menos que se ejecute una recarga de un frame entero (por ejemplo).

Me pregunto si lo que necesitas es cambiar el contenido de un único objeto IMG cada cinco segundos, en cuyo caso el problema es facilmente resolvible.

Por otro lado veo extraño que en la función repetir, no le asignas el objeto que genera tu constructor a nadie. ¿Es intencional?

Saludos.
  #4 (permalink)  
Antiguo 28/07/2003, 16:26
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muchas gracias Biblio, un efecto muy interesante pero creo que adolece de lo que yo pretendo y es que la primera imagen sea aleatoria y luego se vayan cargando una a una todas las imagenes de la serie, me da igual si una a continuación de la otra es decir por orden o bien mejor aleatoriamente, de todas formas repito que es muy interesante ese script.
Un saludo
Morta
  #5 (permalink)  
Antiguo 28/07/2003, 16:30
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muchas gracias Kaopectate, puede que el script tenga algun fallo por mi parte, la verdad es que no controlo demasiado el tema. De todas formas el script en su primera secuencia funciona correctamente es decir, carga la primera imagen aleatoria y luego la segunda, pero ya no carga la tercera. Te agradecería una solución. El uso de document.write() igual no es correcto.
Un saludo
Morta
  #6 (permalink)  
Antiguo 28/07/2003, 18:13
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Prueba esto a ver si te ayuda, tiene un problema con el alt porque creo que ese atributo no es manejable vía JavaScript, pero como aproximación creo que funciona.

Código PHP:
<html>
 <
head>
  <
script language="JavaScript">

   var 
Img = new VecImgs(); 
   var 
Alt = new VecAlts(); 

   function 
VecImgs(){ 
    
n=0
    
this[n++] = "paginas/fotos/imagen1.jpg"
    
this[n++] = "paginas/fotos/imagen2.jpg"
    
this[n++] = "paginas/fotos/imagen3.jpg"
    
this[n++] = "paginas/fotos/imagen4.jpg"
    
this[n++] = "paginas/fotos/imagen5.jpg"
    
this[n++] = "paginas/fotos/imagen6.jpg";
    
this.N=n
   }

   function 
VecAlts(){ 
    
n=0
    
this[n++]="imagen 1 \n\251 autor 1"
    
this[n++]="imagen 2 \n\251 autor 2"
    
this[n++]="imagen 3 \n\251 autor 3"
    
this[n++]="imagen 4 \n\251 autor 4"
    
this[n++]="imagen 5 \n\251 autor 5"
    
this[n++]="imagen 6 \n\251 autor 6";
    
this.N=n
   }

   function 
repetir(){ 
    
pos Math.floor(Math.random() * Img.N);
    
sSrc Img[pos];
    
sAlt Alt[pos];
    
with (document.getElementById("aImg")){
     
href sSrc;
     
alt sAlt;
    }
    
document.getElementById("iImg").src sSrc;
   } 

  
</script>
 </head>
 <body>
  <script language="JavaScript">
   pos = Math.floor(Math.random() * Img.N);
   sSrc = Img[pos];
   sAlt = Alt[pos];
   document.write("<a id='aImg' href='"+sSrc+"' alt='"+sAlt+"' target='_blank'><IMG id='iImg' SRC='"+sSrc+"' width=186 height=279>"); 
   id = setInterval("repetir()",5000);
  </script>
 </body>
</html> 
Saludos.
  #7 (permalink)  
Antiguo 29/07/2003, 01:14
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muchas gracias Kaopectate, es mas o menos lo que necesito. Lo único es que no entiendo porqué dices que el atributo ALT no es manejable via Javascript ya que en el script que hice yo si que funciona. He intentado probar con tu ejemplo pero no soy capaz de hacer que funcione.
Un saludo
  #8 (permalink)  
Antiguo 29/07/2003, 08:43
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Yo tampoco lo he podido hacer funcionar respecto al ALT.

Te explico:

Lo que haces cuando generas código con document.write() es escribir código HTML antes de que el browser interprete la página, por lo tanto, puedes escribir los comandos tal y como desees que funcione.

El problema es que una vez cargada la página, el document.write() no tiene mayor efecto porque el browser no se va a enterar de que tu agregaste o no unos comandos HTML mas. Por eso funcionaba tu ejemplo con las primeras 2 imágenes, la primera era la que tenías cargada y luego el primer document.write(), luego de eso, la función generaba un comando HTML cada 5 segundos que el browser no veía.

Respecto a mi ejemplo, desde JavaScript puedes manipular el objeto "tipo a" que equivale a tu <a>, le puedes cambiar su href y varias cosas mas, pero no veo que le puedas cambiar el atributo ALT.

Si alguien sabe como, espero que nos lo diga.

Saludos.
  #9 (permalink)  
Antiguo 29/07/2003, 16:03
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muy agradecido Kaopectate, si parece dificil el conseguirlo
Si doy con ello ya te lo comentaré aunque mis conocimientos de Javascript se están agotando.
Un saludo
  #10 (permalink)  
Antiguo 29/07/2003, 16:08
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
No digas eso...estan creciendo...
  #11 (permalink)  
Antiguo 30/07/2003, 09:36
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Kaopectate:
Cita:
Si alguien sabe como, espero que nos lo diga.
Del modo en que has hecho el script, colocas lo que debería ser el "alt" de la imagen en el anchor, y si recuerdas, los anchor no tienen atributo "alt", sino "title".
Entonces, todo se reduce a que cambies :
Código:
with (document.getElementById("aImg")){
   href = sSrc;
   //esto se cambia de alt a title
   title = sAlt;
}
y también cambias el "alt" por "title" donde usas document.write.

Ahora, con respecto a cambiar el alt de una imagen... Veo que usan metodos DOM par el acceso a los id's de los elementos. Bueno, podemos usar métodos DOM para manipular los atributos de dichos elementos.

En el caso de la imagen, para cambiar el "alt" (o asignarlo) puedes poner:

Código:
document.getElementById("iImg").setAttribute("alt", sAlt);
Saludos.
  #12 (permalink)  
Antiguo 30/07/2003, 09:56
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
¡Gracias Beakdan por todas tus observaciones!!!

  #13 (permalink)  
Antiguo 30/07/2003, 16:19
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muchas gracias Beakdan y Kaopectate. Ahora ya funciona.
Un saludo, da gusto con la qente que se enrolla bien

Este es el script ya modificado:

<script language="JavaScript">

var Img = new VecImgs();
var Alt = new VecAlts();

function VecImgs(){
n=0;
this[n++]="paginas/fotos/imagen1.jpg";
this[n++]="paginas/fotos/imagen2.jpg";
this[n++]="paginas/fotos/imagen3.jpg";
this[n++]="paginas/fotos/imagen4.jpg";
this[n++]="paginas/fotos/imagen5.jpg";
this[n++]="paginas/fotos/imagen6.jpg";
this.N=n;
}

function VecAlts(){
n=0;
this[n++]="imagen 1 \n\251 autor 1";
this[n++]="imagen 2 \n\251 autor 2";
this[n++]="imagen 3 \n\251 autor 3";
this[n++]="imagen 4 \n\251 autor 4";
this[n++]="imagen 5 \n\251 autor 5";
this[n++]="imagen 6 \n\251 autor 6";
this.N=n;
}

function repetir(){
pos = Math.floor(Math.random() * Img.N);
sSrc = Img[pos];
sAlt = Alt[pos];
with (document.getElementById("aImg")){
href = sSrc;
title = sAlt;
}
document.getElementById("iImg").src = sSrc;
}

<script language="JavaScript">
pos = Math.floor(Math.random() * Img.N);
sSrc = Img[pos];
sAlt = Alt[pos];
document.write("<a id='aImg' href='"+sSrc+"' alt='"+sAlt+"' target='_blank'><IMG id='iImg' SRC='"+sSrc+"' width=186 height=279>");
id = setInterval("repetir()",2000);
</script>
  #14 (permalink)  
Antiguo 30/07/2003, 16:25
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Bueno saber que ya funciona...suerte!!!
  #15 (permalink)  
Antiguo 31/07/2003, 00:19
 
Fecha de Ingreso: enero-2002
Mensajes: 74
Antigüedad: 22 años, 4 meses
Puntos: 0
Muchas gracias amigos.
Podeís ver vuestro trabajo funcionando en
http://www.barranquismo.sitio.net/
Un saludo
  #16 (permalink)  
Antiguo 31/07/2003, 00:52
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Que bien que lo hayas logrado, ya ví la página.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:44.