Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    modificare variabile globale da funzione

    sto provando a fare un semplice script che ogni secondo cambi il colore ad un testo:

    codice:
    <html>
    <head>
    <script language="javascript">
    var currColor = "yellow";
    function chgColor()
    {
    	if (currColor == "yellow")
    	{
    		document.getElementById("scritta").style.color="red";
    		currColor = "red";
    	}
    	if (currColor == "red")
    	{
    		document.getElementById("scritta").style.color="green";
    		currColor = "green";
    	}
    	if (currColor == "green")
    	{
    		document.getElementById("scritta").style.color="yellow";
    		currColor = "yellow";
    	}
    
    }
    
    </script>
    </head>
    <body>
    <div id="scritta" style="font-size:22px;">Ciao</div>
    </body>
    <script language="javascript">
    setInterval("chgColor()", 1000);
    </script>
    </html>
    il problema è che non riesco a modificare dalla funzione il valore della variabile globale currColor, mi sto perdendo in un bicchiere d'acqua lo so, aiuti?
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    codice:
    function chgColor()
    {
    	if (currColor == "yellow")
    	{
    		document.getElementById("scritta").style.color="red";
    		currColor = "red";
    	}
    	else if (currColor == "red")
    	{
    		document.getElementById("scritta").style.color="green";
    		currColor = "green";
    	}
    	else if (currColor == "green")
    	{
    		document.getElementById("scritta").style.color="yellow";
    		currColor = "yellow";
    	}
    
    }

    oppure
    codice:
    var colori = ["black", "yellow", "red", "green", "blue", "maroon"];
    var indice_colore = 0;
    function chgColor()
    {
    	indice_colore++;
    	if(indice_colore >= colori.length ) indice_colore = 0;
    	document.getElementById("scritta").style.color = colori[indice_colore];
    }
    Pietro

  3. #3
    funziona grazie, non capisco però perchè con else if funge invece con un semplice if no...
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    con l'if non funzionava perché succede questo.

    Viene scritto ciao in nero (o il colore predefinito per i testi dal dato browser).

    Quindi invochi lo script:

    All'inizio currColor = "yellow";

    il tuo script guarda se currColor è impostato su "yellow" ed in caso affermativo, cambia il colore in "red", riscrive in rosso ma subito dopo controlla pure se il currColor è "red", affermativo, lo cambia in "green", riscrive e ancora controlla se currColor è "green", affermativo, lo cambia in "yellow" e riscrive ancora una volta, il tutto senza pause, tranne quella iniziale di 1 secondo. Risultato, il tuo occhio vede solo il primo cambiamento da colore predefinito a giallo.

    Con gli else invece la cosa è diversa: viene eseguita o l'una o l'altra istruzione, o quella nell' "if" o quella nell' "else". Per cui alla prima chiamata currColor è settato su "yellow", viene cambiato il colore della scritta e il valore della variabile currColor viene impostato su "red" e qui si interrompe l'esecuzione della funzione perché è stata eseguita l'istruzione nell' "if" e non c'è motivo di eseguire quella nell'"else", che invece viene eseguita alla successiva chiamata, visto che currColor è impostata su "red".
    Ciao
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    MITICO, GRAZIE!( )
    "0 è tutto finito. 1 è solo l'inizio"
    HO IL CERTIFICATO DI RESISTENZA.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.