Newsgroup: it.comp.lang.javascript
Titolo: elementi fixed

Ciao a tutti,
qual è il modo per creare degli elementi fissi (ad es. un div 100x100 sempre
in alto a destra) che sia accettato da tutti i browser?
Grazie

Ispirandomi ad uno script preso da JSdir, credo di aver trovato una
soluzione: in pratica ogni 25 ms sposto il mio layer dove volevo.
La mia domanda ora č:
ho usato setTimeout('rep_load()',25)
vorrei diminuire 25 a 10 (o meno...), ne risente il browser o il computer?
Di seguito posto il codice:
function getRef()
{
 if(document.getElementById)
  return document.getElementById('loading').style;
 else if(document.all)
  return document.all.loading.style;
 else
  return document.layers.loading;
}
if (document.getElementById || document.all)
 document.write("<DIV ID='loading'
STYLE='position:absolute;z-index:2;top:10;left:0;width:100%;height:100%;back
ground-image: url(\"images/bckgrnd.gif\");visibility:visible'>"+'<table
border="0" cellpadding="0" cellspacing="0" width="100%" height="99%"
style="height: 99%"><tr><td align="center" valign="middle"><p><img
border="0" src="images/waiting.gif" width="119"
height="34"></p><p>&nbsp;</p></td></tr></table>'+"</DIV>");
else
 document.write("<LAYER NAME='loading' position=absolute z-index=2 top=0
left=0 width=100% height=100% background=\"images/bckgrnd.gif\"
visibility='show'>"+'<table border="0" cellpadding="0" cellspacing="0"
width="100%" height="99%"><tr><td align="center" valign="middle"><p><img
border="0" src="images/waiting.gif" width="119"
height="34"></p><p>&nbsp;</p></td></tr></table>'+"</LAYER>");
var loading_top=getRef();
var timer=null;
function rep_load()
{
 loading_top.top=yscr();
 timer=setTimeout('rep_load()',25);
}
rep_load();
setTimeout('clearTimeout(timer)',5000);

 vorrei diminuire 25 a 10 (o meno...), ne risente il browser o il computer?
Ne risente il browser sicuramente, ma non ne hai alcun beneficio.
Con 25 millisecondi avresti un frame rate di 40 fps molto vicino ai 
30/35 che la retina umana e' in grado percepire come immagini singole.
Con 10ms avresti invece un f/r di 100 fps e qui fallirebbe il monitor 
ancor prima dell'occhio che generalmente ha un vertical retrace 
(schermate al secondo) di 60/75 hertz per i monitor comuni fino a 
risoluzioni di 1280x1024, e non riuscirebbe a star dietro agli 
aggiornamenti che gli darebbe la scheda video, ed otterresti il 
fastidiosissimo flickering.
25ms==40Hz/fps sono IMHO una temporizzazione ideale.
Devi tener conto anche del parco macchine dell'utenza, non è che tutti 
cambiano il pc una volta all'anno.
-- 
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 .

 cambiano il pc una volta all'anno.
Beh, io ti ringrazio, è stato molto interessante qullo che mi hai detto.
Io partivo solo dall'umile osservazione che scrollando traballava
vistosamente e diminuendo il tempo fino ad un certo pto ne giovava... dopo
di chè nessun apparente miglioramento...

Solo adesso realizzo che con il mio post ti ho chiamato in causa, approfitto
ad invitarti a guardare quello che ho postato perchè almeno funziona con
tutti, OP vecchi compresi....cosa che la tua versione mi sembrava non
facesse...
Ciao

 invece un f/r di 100 fps e qui fallirebbe il monitor
.. E com'e' che ci sono giochi che vanno tranquillamente sopra i 100fps? 
:)
Senza contare che ho fatto un programma in OpenGL semplice semplice, 
testato su diversi computer che mi danno 490fps.. ed il monitor non e' 
che esplode, eh. ;)
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 che esplode, eh. ;)
Mica ho detto che esplode, ma rimane il fatto che in questo momento ad 
esempio sto usando un VR di 60 Hz, i 490fps che mi scrivi a cosa 
corrispondono, a frames generati dal processore&c o ad effettivi 
aggiornamenti dello schermo?


, 
giann...@tin.it
 
says...

Per me opera non era compreso per l'impossibilita' di aggiornare il 
contenuto del div dinamicamente.
Cmq ricorda che per Moz+ c'e' la proprieta' fixed dei css, mentre per IE 
puoi usare onscroll.
In ogni caso io invece del setTimeout userei setInterval cosi':
var loading_top=getRef();
function rep_load()
 {
 loading_top.top=yscr();
 }
var timer=setInterval("rep_load()",25);;
setTimeout('clearInterval(timer)',5000);
Ricorda cmq di attivare tutto l'ambaradan all'onload del documento.


 Ricorda cmq di attivare tutto l'ambaradan all'onload del documento.
Sì ok.

 ma me l'hanno giustamente bocciata
Lascialo fixed e invisibile.
Se il browser e' "gecko" lo rendi visibile e fa il suo lavoro, se e' IE 
lo sposti con onscroll.
E' una cosa che sto facendo per un sito nuovo, non ho ancora provato con 
Opera, mal che vada resta invisibile e non se ne parla piu'.


 Opera, mal che vada resta invisibile e non se ne parla piu'.
Come ti dicevo accetta fixed, devo controllare, ma anche le versioni
vecchie...

 poi non riesco a spostare il <div>
Che versione?
Se parli dalla 6 non l'ho ancora provata... ho una to-do list per questo 
sito di 30 cose da fare... il loghetto fisso non l'ho manco inserito :-)


 sito di 30 cose da fare... il loghetto fisso non l'ho manco inserito :-)
No, non solo,
prova a fare questa banalità:
<div style="position:fixed;top:100">Ciao</div>
Col cavolo che ci và :"((

, 
giann...@tin.it
 
says...

Provero', ma a spanne forse se gli dai anche la coord orizzontale :-)
Cmq io ho
<div id="MicroLogo"> ... img ... </div>
e nel foglio di stile:
#MicroLogo {
	position : absolute ;
	bottom : 5px ;
	right : 5px ;
	visibility : hidden ;
	}
Poi lo gestisco come ti dicevo sopra


 Poi lo gestisco come ti dicevo sopra
Eh, ma come gli dici fixed per NN,MZ,OP

Ho fatto qualche test, con:
<div style="position:fixed;top:100">Ciao</div>
i risultati sono che funziona con:
NN6+,MZ1.x,OP4+