Foros del Web » Programando para Internet » Javascript »

4 Imágenes aleatorias en 1 página

Estas en el tema de 4 Imágenes aleatorias en 1 página en el foro de Javascript en Foros del Web. Inicio un nuevo tema aunque la pregunta tiene relación con ESTE post. Lo que necesito hacer es esto: 1. Tener un directorio con un listado ...
  #1 (permalink)  
Antiguo 06/12/2003, 15:19
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
4 Imágenes aleatorias en 1 página

Inicio un nuevo tema aunque la pregunta tiene relación con ESTE post.
Lo que necesito hacer es esto:

1. Tener un directorio con un listado de por ej. 20 imágenes.
2. En el html se deben cargar 4 de esas imágenes al azar (sin repetir ninguna).
3. Se tienen que mostrar en 4 zonas diferentes de la página, no todas en línea.

Sería algo así como "Insertar variable 1 aquí","Insertar variable 2 allá", etc ...

Alguna idea de cómo hacerlo?

Desde ya gracias.
__________________
_____________________
Duchamp
  #2 (permalink)  
Antiguo 06/12/2003, 17:29
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola duchamp:

Dime si te sirve esto:

Código PHP:
<html>
<
head>
<
title>
    
4 imágenes sin repetir
</title>
<
script>
var 
imagenes = [
    
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
];

function 
azar()    {
    var 
temp = new Array(4);
    
temp[0] = Math.floor(Math.random() * imagenes.length);
    do
        
temp[1] = Math.floor(Math.random() * imagenes.length);
    while (
temp[0] == temp[1])
    do
        
temp[2] = Math.floor(Math.random() * imagenes.length);
    while (
temp[0] == temp[1] || temp[0] == temp[2] || temp[1] == temp[2])
    do
        
temp[3] = Math.floor(Math.random() * imagenes.length);
    while (    
temp[0] == temp[1] ||
        
temp[0] == temp[2] ||
        
temp[1] == temp[2] ||
        
temp[0] == temp[3] ||
        
temp[1] == temp[3] ||
        
temp[2] == temp[3]
)
//    alert(temp[0] + ", " + temp[1] + ", " + temp[2] + ", " + temp[3]);
    
document.images.imagen1.src imagenes[temp[0]];
    
document.images.imagen2.src imagenes[temp[1]];
    
document.images.imagen3.src imagenes[temp[2]];
    
document.images.imagen4.src imagenes[temp[3]];
}
</script>
</head>
<body onload=azar()>
<img src="" name=imagen1>
<img src="" name=imagen2>
<img src="" name=imagen3>
<img src="" name=imagen4>
</body> 
</html> 
Si lo pruebas, pon otras imágenes, porque algunas tienen bastante peso.

Saludos
  #3 (permalink)  
Antiguo 06/12/2003, 17:58
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Caricatos, un millón de gracias!
Funciona a la perfección, lo probé en IE, Firebird, Netscape y Opera.
Me olvidé de mencionar lo de los links en cada imágen, tal como en ese post que mencioné, pero haré el intento a ver si lo consigo por mis medios.

Saludos.
__________________
_____________________
Duchamp
  #4 (permalink)  
Antiguo 06/12/2003, 18:08
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
No van 5 minutos de intentarlo y ya tengo jaqueca! ;-(
__________________
_____________________
Duchamp
  #5 (permalink)  
Antiguo 06/12/2003, 18:16
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284


¿Los enlaces son también aleatorio?... ¿Tienen que ver con la imágen?

Puedes crear otro array con los enlaces.

Saludos
  #6 (permalink)  
Antiguo 06/12/2003, 18:21
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
cada imagen tiene un enlace específico:
imagen 1 con enlace 1
imagen 2 con enlace 2, etc.
sigo analizando cómo hacerlo y veo la idea, pero ya llevo + de 10 horas frente a la PC! Creo que debo tomarme un descanso ...
__________________
_____________________
Duchamp
  #7 (permalink)  
Antiguo 07/12/2003, 12:59
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Un arreglo sencillo es tal como te dije, crear un array con los enlaces, para el ejemplo usé los mismos valores que las imágenes:

Código PHP:
var enlaces = [
    
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
]; 
Luego puse unos links con sus "id" junto a las imágenes:

<a href="" id=enlace1>
<img src="" name=imagen1>
</a>
<a href="" id=enlace2>
<img src="" name=imagen2>
</a>
<a href="" id=enlace3>
<img src="" name=imagen3>
</a>
<a href="" id=enlace4>
<img src="" name=imagen4>
</a>

y por último 4 nuevas lineas en la función de inicialización:

Código PHP:
    document.getElementById("enlace1").href enlaces[temp[0]];
    
document.getElementById("enlace2").href enlaces[temp[1]];
    
document.getElementById("enlace3").href enlaces[temp[2]];
    
document.getElementById("enlace4").href enlaces[temp[3]]; 
Saludos
  #8 (permalink)  
Antiguo 07/12/2003, 13:10
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Gracias maestro. Me has evitado un largo rato de devaneos, y de paso puedo analizarlo y aprender "algo" ...
Ahora lo probaré ...

Saludos
__________________
_____________________
Duchamp
  #9 (permalink)  
Antiguo 07/12/2003, 13:58
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Ah, claro, se produce un error porque aún hay que modificar la función Azar ...
__________________
_____________________
Duchamp
  #10 (permalink)  
Antiguo 07/12/2003, 16:10
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
No hay caso Caricatos. Lo dejo en tus manos porque ya me doy cuenta que mis conocimientos de javascript son "precámbricos"!!!
Falta algo en la función azar, pero no estoy seguro acerca de lo que hay que modificar. Lo que hice por costumbre es crear un archivo random.js con las funciones y variables, y luego cargarlo en el <head>
__________________
_____________________
Duchamp
  #11 (permalink)  
Antiguo 07/12/2003, 16:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Te había puesto todo por partes... ... pero ahora voy a ponerlo completo (a mi me funciona, aunue solo lo probé en explorer)

Código PHP:
<html>
<
head>
<
title>
    
4 imágenes sin repetir
</title>
<
script>
var 
imagenes = [
    
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
];

var 
enlaces = [
    
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
    
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
    
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
];

function 
azar()    {
    var 
temp = new Array(4);
    
temp[0] = Math.floor(Math.random() * imagenes.length);
    do
        
temp[1] = Math.floor(Math.random() * imagenes.length);
    while (
temp[0] == temp[1])
    do
        
temp[2] = Math.floor(Math.random() * imagenes.length);
    while (
temp[0] == temp[1] || temp[0] == temp[2] || temp[1] == temp[2])
    do
        
temp[3] = Math.floor(Math.random() * imagenes.length);
    while (    
temp[0] == temp[1] ||
        
temp[0] == temp[2] ||
        
temp[1] == temp[2] ||
        
temp[0] == temp[3] ||
        
temp[1] == temp[3] ||
        
temp[2] == temp[3]
)
//    alert(document.links.length);
    
document.getElementById("enlace1").setAttribute("href"enlaces[temp[0]]);
    
document.getElementById("enlace2").href enlaces[temp[1]];
    
document.getElementById("enlace3").href enlaces[temp[2]];
    
document.getElementById("enlace4").href enlaces[temp[3]];
    
document.images.imagen1.src imagenes[temp[0]];
    
document.images.imagen2.src imagenes[temp[1]];
    
document.images.imagen3.src imagenes[temp[2]];
    
document.images.imagen4.src imagenes[temp[3]];
}
</script>
</head>
<body onload=azar()>
<a href="#" name="enlace1">
<img src="" name=imagen1>
</a>
<a href="" name=enlace2>
<img src="" name=imagen2>
</a>
<a href="" name=enlace3>
<img src="" name=imagen3>
</a>
<a href="" name=enlace4>
<img src="" name=imagen4>
</a>
</body> 
</html> 
Saludos
  #12 (permalink)  
Antiguo 07/12/2003, 17:06
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Pero si hasta parece magia!!!
Me había equivocado en el ID de un enlace y eso provocaba el error!
Ahora funciona genial, las fotos cargan aleatoriamente en 4 partes diferentes de la página y cada una tiene siempre su enlace correspondiente.
Con una conexión adsl carga en un pestañear, no creo que con un dial-up tarde demasiado, no?

Hasta luego y gracias nuevamente!
__________________
_____________________
Duchamp
  #13 (permalink)  
Antiguo 20/12/2003, 15:30
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1
Antigüedad: 20 años, 4 meses
Puntos: 0
EstimadoS :
Como lo puede hacer para que las imagenes sean aleatorias con un sistema de tiempo, osea que cada ciertos minutos se vaya haciendo el cambio sólo ..

Atte.,
  #14 (permalink)  
Antiguo 21/12/2003, 02:36
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola batu, bienvenido a los foros :

Usando la función azar(), me parece que podrías usar algo así:

<body onload=setInterval('azar()', 10000)>

Eso debería llamar a azar cada 10 segundos. Posiblemente haya que hacer una asignación inicial.

Saludos

Última edición por caricatos; 21/12/2003 a las 03:40
  #15 (permalink)  
Antiguo 16/07/2004, 12:30
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 20 años, 4 meses
Puntos: 1
hola a todos. Y si en vez de imagenes tuviera animaciones flash? como haría con los tiempos? lo pregunto porque cada animación tiene duraciones diferentes asi q no podria poner un tiempo x xq sino la animación no se vería completa. Cómo haría en ese caso? Muchas gracias.
  #16 (permalink)  
Antiguo 16/07/2004, 16:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Tarecito:

La verdad es que el tema "Flash" lo tengo descuidado, pero tendría que hacerse de otra manera... Me parece que las animaciones flash generan etiquetas distintas para navegadores distintos, se pueden hacer esperas selectivas (dependiendo de la animación... )

Creo que tal vez sería mejor hacer la pregunta en un mensaje nuevo, con esta respuesta de referencia y mostrando las animaciones que quieres que se vean...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 29/08/2005, 08:18
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Validar

Caricatos, maestro, ya ha pasado bastante tiempo desde que me diste una mano con esta idea y hoy se me ocurrió "validar" la página donde aún utilizo este script pero me encontré con que me faltaba el atributo ALT en cada imagen!
Lo mas sencillo sería poner algo como
Código HTML:
alt="texto genérico aquí"
pero se me ocurre que algo mejor sería o tener un nuevo grupo de variables con el texto alternativo de cada imagen o re-utilizar la URL asociada a cada imagen e insertarla en el ALT ... creo que lo primero tiene mas lógica.
Me das una mano?

Gracias!
__________________
_____________________
Duchamp
  #18 (permalink)  
Antiguo 29/08/2005, 10:30
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

En base al último código;

<html>
<head>
<title>
4 imágenes sin repetir
</title>
<script>
var imagenes = [
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
];

var enlaces = [
"http://www.sucaricatura.com/2002/maxi/2002H001.jpg",
"http://www.sucaricatura.com/2002/mini/2002H002.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H003.jpg",
"http://www.sucaricatura.com/2002/mini/2002H004.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H005.jpg",
"http://www.sucaricatura.com/2002/mini/2002H006.jpg",
"http://www.sucaricatura.com/2002/maxi/2002H007.jpg"
];

var alts = [
"mensaje primero",
"mensaje segundo",
"mensaje tercero",
"mensaje cuarto",
"mensaje quinto",
"mensaje sextoo",
"mensaje septimo"
];

function azar() {
var temp = new Array(4);
temp[0] = Math.floor(Math.random() * imagenes.length);
do
temp[1] = Math.floor(Math.random() * imagenes.length);
while (temp[0] == temp[1])
do
temp[2] = Math.floor(Math.random() * imagenes.length);
while (temp[0] == temp[1] || temp[0] == temp[2] || temp[1] == temp[2])
do
temp[3] = Math.floor(Math.random() * imagenes.length);
while ( temp[0] == temp[1] ||
temp[0] == temp[2] ||
temp[1] == temp[2] ||
temp[0] == temp[3] ||
temp[1] == temp[3] ||
temp[2] == temp[3]
)
// alert(document.links.length);
document.getElementById("enlace1").setAttribute("h ref", enlaces[temp[0]]);
document.getElementById("enlace2").href = enlaces[temp[1]];
document.getElementById("enlace3").href = enlaces[temp[2]];
document.getElementById("enlace4").href = enlaces[temp[3]];
document.images.imagen1.src = imagenes[temp[0]];
document.images.imagen2.src = imagenes[temp[1]];
document.images.imagen3.src = imagenes[temp[2]];
document.images.imagen4.src = imagenes[temp[3]];
document.images.imagen1.alt = imagenes[temp[0]];
document.images.imagen2.alt = imagenes[temp[1]];
document.images.imagen3.alt = imagenes[temp[2]];
document.images.imagen4.alt = imagenes[temp[3]];

}
</script>
</head>
<body onload=azar()>
<a href="#" name="enlace1">
<img src="" name=imagen1>
</a>
<a href="" name=enlace2>
<img src="" name=imagen2>
</a>
<a href="" name=enlace3>
<img src="" name=imagen3>
</a>
<a href="" name=enlace4>
<img src="" name=imagen4>
</a>
</body>
</html>

Aunque me parece que el validador no estudia los scripts y pasaría sencillamente poniendo en cada etiqueta un alt genérico (incluso una cadena vacía alt="")

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #19 (permalink)  
Antiguo 29/08/2005, 10:46
Avatar de duchamp  
Fecha de Ingreso: enero-2002
Ubicación: Patagonia
Mensajes: 216
Antigüedad: 22 años, 3 meses
Puntos: 1
Claro, tienes razón, si miro el Código Fuente ninguno de los parámetros pasados con el script aparecen ahí:

Código HTML:
<a href="#" id="enlace1"><img src="" name="imagen1" alt="" /></a> 

es decir que no tiene mucho sentido pasar estas nuevas variables si para el validador serán invisibles! Habría que imprimir esas variables dentro del alt="" ... o dejar un texto genérico como mencioné antes.
__________________
_____________________
Duchamp
  #20 (permalink)  
Antiguo 14/09/2005, 01:15
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 3 meses
Puntos: 0
Hola,
necesitaba exactamente una función como esta, así que antes que nada gracias por compartirla. Ahora, yo quisiera añanadir un onclick en las imágenes, o en los hrefs, de modo que el tag quedase más o menos así:

< a href="#" onclick="javascript:window.open(....)"><img ...></a>

¿Cómo se haría? lo he probado con el setattribute, pero no me aclaro, me echais una mano??

Gracias por adelantado.

Última edición por tesa; 14/09/2005 a las 01:56
  #21 (permalink)  
Antiguo 14/09/2005, 02:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola tesa:

Que bien que te sirva a tí también...

Puedes usar el mismo atributo href pero anteponiendo "javascript:" a tu enlace, porque sino tendrías que añadir return false (a mi no me gusta ese uso a no ser que se trate de una validación...

Puedes cambiar el array de enlaces por cadenas así:

var enlaces = [
"javascript: window.open('http://www.sucaricatura.com/2002/maxi/2002H001.jpg')",
...

Ya que ese array ahora no te va a valer.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #22 (permalink)  
Antiguo 14/09/2005, 04:25
 
Fecha de Ingreso: enero-2002
Mensajes: 27
Antigüedad: 22 años, 3 meses
Puntos: 0
Perfecto caricatos, muchísimas gracias!!!!!
  #23 (permalink)  
Antiguo 21/07/2008, 04:18
 
Fecha de Ingreso: abril-2008
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: 4 Imágenes aleatorias en 1 página

Hola, aunque el mensaje es viejo, lo vuelvo a retomar porque tengo una duda sobre este mismo tema.

Estoy intentando utilizar este codigo, para cargar swf's independientes en vez de imagenes, pero no funciona cambiando las extensiones .jpg por .swf...

Solo funciona si son imágenes?, sabéis que cambio habría que hacer en caso de swf's?


Un saludo.

Última edición por okakitorimoke; 21/07/2008 a las 05:22
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 04:42.