il codice in quanto "troppo avanzato" era per fortuna flessibile quindi è bastato solo adattarsi ai QUATTRO stati (blu, verde, giallo, rosso) invece dei due previsti inizialmente (verde - rosso), ecco il codice aggiornato:
Codice HTML:
<html>
<head>
<title></title>
<script type="text/javascript">
var abilitato=0;
var lett_path = 'http://angelworld.altervista.org/Pagine/Lettere/';
var lett_name = 'Lettera_';
var lett_ext = '.png';
//INIZIO unica parte da modificare:
var lett_gestite = new Array('A','B','C','D','E'); //lettere previste
var lett_indimages = new Array( 0 , 1 , 2 , 3 , 4 ); //indice nell'array document.images
var lett_stati = new Array( 0 , 0 , 0 , 0 , 0 ); //stati di attivazione (0=blu, 1=verde, 2=giallo, 3=rosso)
//FINE unica parte da modificare
var lett_coloristati = new Array('b','','g','r'); //prefisso di colore, l'indice equivale al numero di stato
//e' stato premuto un certo tasto, se e' una delle lettere gestite cambia la relativa immagine
function premuto(realKey) {
var ind = indiceInArrayDiElem(lett_gestite, realKey);
if (ind ==-1)
return false;
if (document.images[lett_indimages[ind]]){
lett_stati[ind] = (lett_stati[ind]+1) % lett_coloristati.length; //inverti stato
cambiaImg(ind, realKey);
}
}
//imposta il percorso del file immagine
function cambiaImg(ind, realKey) {
document.images[lett_indimages[ind]].src =
lett_path + lett_coloristati[lett_stati[ind]] + lett_name + realKey + lett_ext;
}
//utilita' per sapere l'indice di un elemento in un array
function indiceInArrayDiElem(arr, elem){
var i=-1;
while(++i<arr.length){
if (arr[i]==elem)
return i;
}
return -1; //non trovato
}
//imposta l'immagine iniziale in base al suo stato iniziale
function initImg(){
for (var i=0; i<lett_gestite.length; i++)
cambiaImg(i, lett_gestite[i]);
}
function test(){
browserName=navigator.appName.charAt(0);
browserVer=parseInt(navigator.appVersion);
if (browserName=="M" && browserVer >= 3) abilitato=1;
if (browserName=="N" && browserVer >= 3) abilitato=2;
if (browserName=="N" && browserVer >= 4) abilitato=3;
if (browserName=="M" && browserVer >= 4) abilitato=4;
}
function keyDown(e) {
var realkey = '';
if (abilitato==3) {
realkey = String.fromCharCode(e.which);
}
if (abilitato==4) {
realkey = String.fromCharCode(event.keyCode);
}
premuto(realkey);
}
document.onkeydown = keyDown
test(); //avvia il test browser
</script>
</head>
<body>
<img src="" STYLE="position: absolute; top:10px; left:5px;" alt="A"/>
<img src="" STYLE="position: absolute; top:10px; left:55px;" alt="B"/>
<img src="" STYLE="position: absolute; top:10px; left:105px;" alt="C"/>
<img src="" STYLE="position: absolute; top:10px; left:155px;" alt="D"/>
<img src="" STYLE="position: absolute; top:10px; left:205px;" alt="E"/>
<script type="text/javascript">
initImg(); //aggiorna stato iniziale
</script>
</body>
</html>
L'unica cosa che devi cambiare è il numero di lettere "gestite", cioè:
var lett_gestite = new Array('A','B','C','D','E'); //lettere previste
come vedi mi sono fermato solo alla lettera E, puoi continuare indicando l'alfabeto che vuoi (per es. non so se vuoi le lettere dell'alfabeto inglese J,K,W,...) decidi tu quali.
Per ciascuna lettera che aggiungi nell'Array "lett_gestite" devi aggiungere un elemento negli altri due array correlati
lett_indimages e lett_stati
- in lett_indimages devi semplicemente scrivere l'indice (0, 1, 2...) che le immagini hanno rispetto alla pagina, per farti capire, se all'inizio della stessa pagina hai una immagine per il titolo questa è considerata l'immagine indice 0 ( document.images[0] ) quindi in questo caso lett_indimages avrebbe i numeri (1, 2, 3, ...) invece che (0, 1, 2...)
- in lett_stati devi indicare per ciascuna lettera gestita qual è il suo stato iniziale, ad esempio: se le lettere gestite sono ('A','B','C') e per assurdo devono partire dallo stato GIALLO in lett_stati indicherai (2, 2, 2). Altro esempio se le lett_gestite ('A','B','C','D','E') devono partire con la A e B VERDI e tutte le altre BLU allora in lett_stati indicherai (1, 0, 0, 0, 0).
E ovviamente nel html body dovrai inserire le immagini delle altre lettere aggiunte.
Forse quel che ti sembra "avanzato" e magari poco chiaro è l'uso degli Array? Mi sembra decisamente un 'esercizio' in cui gli array risolvono alla grande le esigenze con il minimo codice ripetuto. Infatti come vedrai la path BASE alle tue immagini compare una volta sola, mentre solo per le lettere A e B del tuo primo abbozzo, per due sole lettere comparivano SEI path immagine, e puoi immaginare che bordello se invece di A e B, dovevi arrivare fino alla Z
Fai così, tu prova a modificare quel poco che devi toccare (il resto del codice si adegua da sè agli array di "configurazione") quindi aumenta elementi nei tre array lett_gestite, lett_indimages e lett_stati (tutti devono avere lo stesso numero di elementi, sono correlati) e in fondo i tag IMG.
Provi, se non funge fammi sapere che ti spiego o correggo il tuo codice.
Ciao