Newsgroup: it.comp.lang.javascript
Titolo: alternanza di immagini

Salute e prosperita' a tutto il gruppo.
Ho messo in una mia pagina HTML lo script seguente:
<script language="JavaScript">
 var alternate = 0;
 var timerId;
 var images = new Array("imm1.gif", "imm2.gif"); 
 function startAnimation() {
    alternate = (alternate == 0) ? 1 : 0;
    document.images[3].src = images[alternate];
    timerId = setTimeout("startAnimation()", 1000);
 }
</script>
La funzione è richiamata cosi':
<a href="#" onMouseOver="startAnimation()"
onMouseOut="clearTimeout(timerId)"><img SRC="imm1.gif" height=22
width=65></a>
Ora vorrei vitare di inserire i nomi delle immagini direttamente
nell'array definita nello script e passarli invece come parametri
della funzione. Avete suggerimenti? Grazie.
Alastor

alastor ha scritto:

Prova così (pos è la posizione nell'array immagini, visto che cambierà):
function startAnimation(images,pos) {
     ...
      document.images[pos].src = images[alternate];
     ...
}
poi la richiami così:
onMouseOver="startAnimation(['imm1.gif', 'imm2.gif'],3)"
In JS per fare un array basta metterlo tra quadre.
Ciao
-- 
Stefano
--------------------
www.thepisu.tk
www.experiencenet.it


www.experiencenet.it
Grazie. Ecco come ho fatto:
<!--
 var timerid;
 var altern = 0;
 function startAnimation(imges,pos) {
    altern = (altern == 0) ? 1 : 0;
    document.images[pos].src = imges[altern];
    timerId = setTimeout("startAnimation(['" + imges[0] + "','" +
imges[1] + "']," + pos + ")", 1000);
 }
//-->
Richiamo:
<a href="#" onMouseOver="startAnimation(['img1.gif','img2.gif'],3)"
onMouseOut="clearTimeout(timerId)"><img SRC="img1.gif" width=65></a>
Ma per avere uno scambio tra piu' di due immagini? Bisognerebbe
passare anche il numero delle immagini e, p. es., fare un loop di
For?...
Alastor

 Alastor
Non serve passare il numero di immagini, recuperi la lunghezza 
dell'array (images.length). Poi invece che alternare incrementi di 1, e 
se arrivi alla fine riparti da 0:
altern = alter + 1;
if (altern == imges.length) {
   altern = 0;
}
document.images[pos].src = imges[altern];
In questo modo, puoi richiamare la funzione con il numero di immagini 
che vuoi.
onMouseOver="startAnimation(['img1.gif','img2.gif','img3.gif',.......],3)"
Riguardo setTimeout, da standard questi sono metodi dell'oggetto window, 
perciò va richiamato utilizzando "window.setTimeout" altrimenti in 
alcuni browser potrebbe non funzionare. Inoltre nella funzione, non 
dovrebbe essere necessario riscrivere tutto l'array, mi sembra che si 
possano utilizzare tranquillamente le variabili, prova così:
timerId = setTimeout("startAnimation(imges,pos), 1000);
------------
Per rendere il tutto più comodo potresti svincolarti dal numero di 
immagine, assegnanto ad ognuna un ID ed usando quella.
Nel tag IMG aggiungi l'attributo ID:
<img SRC="img1.gif" width=65 ID="prima">
Nel tag A HREF sostituisci il numero di posizione con l'ID (tra virgolette):
onMouseOver="startAnimation(['img1.gif','img2.gif'],'prima')"
Nella funzione:
document.getElementById(pos).src = imges[altern];
Molto più gestibile, no?
Buon lavoro!
NB: Io da domani mattina sono in vacanza a Sirmione, forse senza 
computer (!!!), perciò non potrò rispondere...


 }
altern=(altern+1)%images.length ?
-- 
Capacita'. Volonta'. Occasione.
Cio' che serve per ottenere quel che si desidera.

 
Già non ci avevo pensato interessante forma!!



www.experiencenet.it
Questa formula e' ancora troppo difficile per me. Io sto a questo
punto:
<!--
 var timerid;
 var timerv;
 function startAnim(imges,pos,ix) {
    document.images[pos].src = imges[ix];
    ix = ix + 1;
    timerv = 1000;
    if (ix == imges.length) {
       ix = 0;
       timerv = 8000;
    }    
    timerId = setTimeout("startAnim(['" + imges[0] + "','" + imges[1]
+ "','" + imges[2] + "']," + pos + "," + ix + ")", timerv );
//-->
Cosě funziona. Ma se scrivo il setTimeout cosě:
    timerId = setTimeout("startAnim(imges,pos,ix)", timerv );
non funziona piů. Sbaglio qualcosa?
Alastor