Newsgroup: it.comp.lang.javascript
Titolo: Immagini a caso da una cartella.

Salve.
Nella home page di un sito avrei necessità di far vedere, ogni volta che
qualcuno ci entra, un paio di immagini prese a caso da un gruppo di
circa 50.
Il problema è che il sito è statico, quindi non so come realizzare la
cosa. Si può fare con un javascript che possa funzionare sulla maggior
parte dei computer possibile? Oppure, che tecnica è meglio utilizzare?
Spero di essermi spiegata bene
Grazie
Cristina

Statica nel senso che non puoi far nulla lato server, vero?
Non potendo elencare le immagini l'unica idea che mi viene è un array: crei
un array dei nomi delle immagini, estrai un numero a caso tra 0 e
tuoarray.length-1 e al src della tua immagine associ l'immagine corretta

del tipo:
<html><head>
<script language="javascript">
var arr=new
Array('\\new\\images\\excel.gif','\\new\\images\\no_code.gif','\\new\\images
\\accettati.gif','\\new\\images\\analizza.gif','\\new\\images\\annulla_grafi
co.gif');
function caricaimgrandom() {
 var img_da_caricare=Number(Math.round(Math.random()*(arr.length-1)));
 document.images['miaimgrandom'].src=arr[img_da_caricare];
}
</script>
</head><body onload='caricaimgrandom()'>
<img src='\new\images\pixel.gif' name='miaimgrandom'>
</body></html>
Ho messo una immagine vuota all'inizio (altrimenti puoi nasconderla e
visualizzarla dopo); resta il problema delle dimensioni, se hanno tutte la
stessa dimensione ok, altrimenti per netscape può essere un problema

 co.gif');
Ma che mi combini.. on line si usano gli slash, non i backslash. :) 
Inoltre se la path e' presumibilmente la stessa, come fa notare lei, 
puoi benissimo ometterla nell'array (che senso ha duplicarla ogni 
volta).
var arr=["excel.gif","no_code.gif","accettati.gif","etc.gif"];
Inoltre, se le immagini devono essere solo caricate all'entrata, 
perche' tutto questo ambaradan? Basta un:
<body>
	<script>putRandomImage();</script>
</body>
dove:
function putRandomImage(){
	var nx=Math.round(Math.random()*(arr.length-1));
	document.write("<img src='/new/images/"+arr[nx]+"'/ alt='random 
image n."+nx+"' border='0'>");
	document.close();
}
Per Cristina:
Va da se' che se si ha le immagini presenti nella cartella dello stesso 
tipo (tutte jpg o gif), e con una data nomenclatura (img20.gif), l'array 
e' del tutto inutile, e non c'e' bisogno di modificare l'array ogni 
volta che inseriamo un tot di immagini, ma solo di incrementare una 
variabile.
In questo caso, il codice sarebbe solo:
var maximages=50;
function putRandomImage(){
	var nx=Math.round(Math.random()*(maximages));
	document.write("<img src='/new/images/img_"+nx+".gif'/ alt='random 
image n."+nx+"' border='0'>");
	document.close();
}
Il vantaggio del primo codice e' che non sei legata al File System, e 
quindi puoi avere le immagini in qualsiasi nome/tipo ti pare.
Ma la manutenzione e' piu' rognosa.
Il secondo invece e' l'esatto opposto.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 perche' tutto questo ambaradan? Basta un:
Vero, io tendo a fare script generici, poi uno li adatta alla sua esigenza
esatta...(quando lo ho scritto ho pensato "mò Zer0 mi cazzia..." :-)

> var arr=["excel.gif","no_code.gif","accettati.gif","etc.gif"];
Curiosità: questa sintassi con quadre che é?

 Curiosità: questa sintassi con quadre che é?
Array. Forma compatta.
var arr=[]
e' equivalente a var arr = new Array()
Analoga per gli oggetti:
var obj ={a:2,b:3,c:"pippo"}
var obj = new Object()
obj.a=2;
obj.b=3;
obj.c="pippo";

 obj.c="pippo";
Questa poi è fantastica...
Grazie

 Array. Forma compatta.
Per esser precisi, e' l'object initializer.
Per definire oggetti ci sono due modi: Usando una constructor function o 
un object initiliazer.


 Questa poi è fantastica...
Vero?
Ottima per dati strutturati senza tirare in ballo Array (e tutto il loro
cristo di metodi).

 Questa poi è fantastica...
Difatti l'object initializer nasce per questo genere di cose. Io, per 
esempio, lo utilizzo per simulare i packages/namespace (anche se 
all'inizio mi son fatto prendere troppo la mano, ed e' venuto fuori un 
codice INGESTIBILISSIMO.. adesso mi son ripreso. :) ).
Considera cmq, che e' utile nel momento in cui non hai bisogno di 
crearti un certo numero di classi, ma una sola rappresentazione di un 
certo tipo di dato.


 Curiosità: questa sintassi con quadre che é?
uh, un letterale array
~~
artemis.alpeia