[javascript] dubbio su una funzione

Blackorgasm
Ciao a tutti :D

ho dei problemi con una funzione che, ricorsivamente, dovrebbe cambiare il colore di sfondo di tre paragrafi, a distanza di un secondo l'uno da l'altro, così da far sembrare che avvenga una "scansione" del testo. (spero di essermi fatto capire :-D ) vi posto il codice:






Laboratorio



ciao a tutti


oggi è una bella giornata


che caldo che fa






con questo codice mi viene cambiato solo il colore di sfondo dell'ultimo paragrafo. Grazie per le eventuali risposte :D

Risposte
Rggb1
TI cambia solo l'ultimo perché la proprietà di stile dei precedenti non è 'white'... aggiungi una cosa simile
if (primo.style.background == "white" || primo.style.background == "")

Anche se non è detto funzioni (forse non definito != "", ma vado a memoria e non sono sicuro). Al limite pre-imposta lo sfondo a "white"...

Blackorgasm
infatti al primo giro la funzione deve cambiare il colore solo alla prima riga e poi finire; dopo un secondo deve essere richiamata e cambiarlo alla seconda riga e poi dopo un altro secondo alla terza, quindi quando la condizione nell'if non è verificata (per esempio al secondo giro) deve saltare le istruzioni del primo if ed andare all'else if, infatti al secondo giro lo sfondo della prima riga è rosso, impostato al primo giro. Spero di averti fatto capire le mie intenzioni :-D mi scuso altrimenti

Rggb1
Infatti avevo capito in quel modo: al "primo giro" non cambia colore perche il colore di fondo dell'elemento non è 'white' ma è indefinito, e quindi il confronto per verificare se sia uguale a 'white' è falso. Puoi anche - meglio? - cambiare il metodo di confronto, invece di controllare se è bianco (e non lo è, perché non è definito il colore), controlla non sia già stato impostato a rosso:

if (primo.style.backgroud <> "red") ..
else if (secondo.style.background <> "red"> ...

Blackorgasm
ho cambiato il metodo di confronto in questa maniera:

if (primo.style.background !== "red") ...
else if (secondo.style.background !== "red"> ...

solo che ora cambia lo sfondo solo alla prima riga, le altre due rimangono bianche :(
forse faccio un errore logico col return, mi spiego meglio: bloccando la funzione, esso non è che blocca anche il setInterval? ovvero una volta interrota la funzione, non è più possibile richiamarla?

Rggb1
No la definizione onLoad è corretta. Semplicemente l'operatore !== è "strict not equal", e quindi probabilmente reimposta ad ogni ciclo "red" come attributo di "background"; prova ad usare l'operatore "!=", oppure anche gli indici di colore.

EDIT. Effettivamente il tuo ciclo non si ferma mai... dovresti aggiungere un po' di codice che - alla fine della "coloratura" dell'ultimo elemento che ti interessa, rimuove il setInterval.

Blackorgasm
innanzitutto grazie per le risposte :D

niente da fare, ho cambiato ma il problema rimane, comunque cosa intendi per "indici di colore"? Magari il prof ce ne ha parlato sotto un altro nome :?

Blackorgasm
innanzitutto grazie per le risposte :D

niente da fare, ho cambiato ma il problema rimane, comunque cosa intendi per "indici di colore"? Magari il prof ce ne ha parlato sotto un altro nome :?

Rggb1
Stiamo incartandoci forse per un nonnulla...

La proprietà "background" non indica solo il colore, quindi puoi impostare "red" (e prenderà un colore) ma non riporta mai solo il colore ma l'intero stile. Usa pertanto "background-color", dovrebbe funzionare.

[ Mea culpa: si parla di colore, pensavo di usare automaticamente background-color, altrimenti me ne sarei accorto subito :\ ]

Blackorgasm
if (primo.style.background-color !== "red")

ho scritto così, solo che adesso non fa più niente XD nessuna proprietà è cambiata.
Ho provato veramente qualsiasi combinazione di codici prima di postare qui (settando e riprendendo dopo gli attributi, if dentro if ecc...), sono alla frutta :( cominciano a scarseggiare le idee, secondo me comunque è un problema del return col setInterval :?

Rggb1
Semmai
- if (primo.style.backgroundColor != "red") ...
o anche
- if (primo.style.backgroundColor !== "red") ...

in quanto "background-color" nei CSS, "backgroundcolor" in JS.

Blackorgasm
:D funziona! (che gaffe :oops: ) non so come ringraziarti! grazie grazie grazie :D stavo per diventarci matto....quante finezze ci sono in javascript!

Rggb1
Prego.
"Blackorgasm":
quante finezze ci sono in javascript!

Beh, anche se qui non era il caso (mi sono solo confuso), questo è vero. Fare script lato client può essere veramente rognoso.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.