Newsgroup: it.comp.lang.javascript
Titolo: Cambiare il proprio sfondo ogni Tot tempo

Salve a tutti, ho creato uno script per cambiare lo sfondo del
desktop, visto che ho tanti wallpaper simpatici :)
Beh, il codice č questo (dopo il quale vi dirň i problemi che
ho avuto):
<script language="JavaScript">
<!--
 sfondi=new Array(5)
 sfondi[0]="Celestia.jpg";
 sfondi[1]="Celestia3.jpg";
 sfondi[2]="Dolphin_eye.jpg";
 sfondi[3]="Effusion.jpg";
 sfondi[4]="Euphoria.jpg";
 sfondi[5]="Goku_GT.jpg";
 function background(){
  CambiaSfondo=Math.floor(Math.random()*5);
  document.write ("<div
style=\"position:absolute\">"+sfondi[CambiaSfondo]+"</div>");
  document.body.style.backgroundImage="url("+sfondi[CambiaSfondo]+")";
  setTimeout("background()",120000);
}
background();
//-->
</script>
Adesso... prima di tutto mi trovo in una buffissima situazione, se non
visualizzo con document.write il numero random di CambiaSfondo,
č come se non ci fosse e non mi cambia l'immagine! Invece cosě va..
Una cosa assurda!
Poi... quando scatta il secondo minuto (beh, io ho provato a distanza
di due secondi ma č lo stesso), ricarica la funzione, ma anzichč caricarmi
il nuovo sfondo, mi da una pagina bianca, senza style vari e senza niente,
come se fosse una pagina completamente vuota. Dopo altri due secondi
(o due minuti), mi da errore nello script perchč non trova piů l'oggetto,
proprio
perchč sembra una pagina completamente vuota/bianca.
Qualcuno ha un'idea di come si possa risolvere questo super-mistero?
Grazie a tutti :)
--
Claudio Di Vicino
Homepage: 
www.kynes.it

 </script>
Questo è dinuovo brutto, è meglio fare partire la funzione dopo che la pag.
è stata caricata!
Quindi di seguito il codice corretto, migliorato e ottimmizzato:
<script language="JavaScript">
<!--
sfondi=new
Array("Celestia.jpg","Celestia3.jpg","Dolphin_eye.jpg","Effusion.jpg","Eupho
ria.jpg","Goku_GT.jpg");
function background()
{
 if(document.body.style){
document.body.style.backgroundImage="url('"+sfondi[Math.floor(Math.random()*
6)]+"')";
  setTimeout("background()",120000);
 }
}
//-->
</script>
</head>
<body onLoad="background()">
Così non hai problemi con browser vecchi.
Si può fare di meglio, infatti se le immagini occupano poco si puossono
precaricare, altrimenti si può fare una precarica volta per volta evitando
che compaia gradualmente.
Lascio a te il divertimento...

 Così non hai problemi con browser vecchi.
il codice da te suggerito è senza dubbio più pulito, purtroppo però non
funziona.
Vedi... quello che non va bene, purtroppo, è che non si tratta di una
normale pagina web da caricare su un normale browser, bensì il desktop di
Windows ME, che ha qualche problema di comprendonio, evidentemente.
Il tuo script infatti non funziona, ma non perchè è sbagliato in se, bensì
il desktop non lo riesce a interpretare...
Gli errori che mi da sono alla riga:
Errore --> if(document.body.style) {
(nel Desktop, evidentemente, non esiste questo oggetto)
Errore -->
document.body.style.backgroundImage="url("+sfondi[Math.floor(Math.random()*8
)]+")";
(Oggetto non trovato)
Quest'ultimo errore si risolve nel modo "sporco" ma funzionale che avevo
trovato io, il problema era più che altro nel ricaricare la funzione
background (vedi primo post).
Grazie comunque per il tuo aiuto.
Microsoft Rulez :P (sarcasticissimo)
--
Claudio Di Vicino
Homepage: 
http://www.kynes.it

 Grazie comunque per il tuo aiuto.
Vediamo un pò cosa riusciamo a fare:
comunque cambia il codice in questo modo e fammi sapere:
<html>
<head>
<script language="JavaScript">
<!--
sfondi=new
Array("Celestia.jpg","Celestia3.jpg","Dolphin_eye.jpg","Effusion.jpg","Eupho
ria.jpg","Goku_GT.jpg");
function background()
{
 if(document.getElementsByTagName("body")){
document.getElementsByTagName("body")[0].style.background="url('"+sfondi[Mat
h.floor(Math.random()*6)]+"') repeat";
  setTimeout("background()",1000);
 }
}
//-->
</script>
</head>
<body onLoad="background()">
</body>
</html>

Ho sbagliato, scusa, usa questo:
<html>
<head>
<script language="JavaScript">
<!--
sfondi=new
Array("Celestia.jpg","Celestia3.jpg","Dolphin_eye.jpg","Effusion.jpg","Eupho
ria.jpg","Goku_GT.jpg");
function background()
{
 if(document.body){
document.body.style.backgroundImage="url('"+sfondi[Math.floor(Math.random()*
6)]+"')";


 Vediamo un pò cosa riusciamo a fare:
**************
<html>
<head>
<script language="JavaScript">
<!--
sfondi=new
Array("Celestia.jpg","Celestia3.jpg","Dolphin_eye.jpg","Effusion.jpg","Eupho
ria.jpg","Goku_GT.jpg");
function background()
{
 if(document.body){
document.body.style.backgroundImage="url('"+sfondi[Math.floor(Math.random()*
6)]+"')";
  setTimeout("background()",1000);
 }
}
//-->
</script>
</head>
<body onLoad="background()">
</body>
</html>
**************
Adesso funziona perfettamente! Ho scoperto qual'era la vera causa di
errore...
All'interno del body ho un'altro javascript, che mi segna il countdown per
una certa data. Beh.. eliminando quello script tutto funziona perfettamente,
quindi il problema dev'essere lì dentro. Cosa sia non lo so, lo smonterò
pezzettino per pezzettino e spero di capirlo :)
Grazie mille x il tuo aiuto, è stato fondamentale!
E... abbiamo scoperto che Desktop e Browser sono un pochino diversi, ma non
troppo!
Ciao!


 NN6+ MZ1+ OP7+)
Sta parlando dell'Active Desktop di Windows.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 troppo!
L'Active Desktop di Windows si basa sul rendering engine dell'IE 
installato nel S.O., quindi da quel punto di vista non sono affatto 
diversi.
Difatti, quando imposti l'Active Desktop non fai altro che avere una 
sorta di istanza di IE al posto dell'immagine di sfondo.
Certo, vi sono alcune differenze.. soprattutto a livello di security, ma 
non per questo genere di cose, come uno sfondo.
Cmq puoi trovare info a proposito sull' MSDN, come ad esempio qua:
http://www.microsoft.com/windows2000/en/professional/help/default.asp
?
url=/WINDOWS2000/en/professional/help/desktop_active_desk.htm


 Una cosa assurda!
Niente di buffo ne' di assurdo :-)
Quando esegui document.write() RI-apri il documento in scrittura 
distruggendo tutto quel che contiene, testi, script, tag e tutto il 
resto, quindi anche le funzioni.
Prova semplicemente a mettere il div fisso direttamente nel sorgente 
della pagina:
<div id='sfondo'> ... </div>
e poi accedi via script con qualcosa del genere:
document.getElementById("sfondo").style.backgroundImage=img(sfondi[n]);
dove "n" e' un indice del tuo array.
Non ho mai provato a cambiare via JavaScript uno sfondo immagine, quindi 
non garantisco sull'esattezza di quel che c'e' dopo "style" :-)
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO e metti un .