Newsgroup: it.comp.lang.javascript
Titolo: elucubrazioni sul setTimeout

Ciao a tutti, vorrei condividere alcuni fatti che ho notato con l'uso del
temporizzatore setTimeout.
Premetto che gli strani eventi che si sono generati dal codice che ho
scritto, possono essere dovuti ad una cattiva codifica dello stesso.
Mi è capitato di aver usato setTimeout per richiamare funzioni che
traslassero i layer da una parte all'altra della pagina o che simulassero la
digitazione di caratteri. Nel caso ad esempio della traslazione i parametri
che determinano la velocità dello spostamento del layer sono due: uno è dato
dall'incremento/decremento minimo della variabile che identifica il
posizionamento verticale od orizzontale  (ad esempio incrementandola di 10px
per volta, raggingerò più velocemente la posizione voluta che non
incrementandola di 5px), il cosiddetto passo, l'altro è dato dal ritardo di
tempo che utilizzo con setTimeout (cioè ogni quanti secondi la funzione
viene richiamata).
Quindi in teoria, per avere un buon effetto di traslazione dovrei tenere il
passo non troppo alto, per evitare che il layer dia l'imressione di muoversi
a scatti, e impostare un richiamo della funzione ad un tempo consono tipo
ogni 100 millisecondi.
In realtà però, dopo aver messo un passo di 10px mi sono trovato a dover
impostare un delay per il Timeout, per avere un buon effetto, di appena 1
ms.
La cosa mi è sembrata un po' strana ma sono comunque andato avanti ed ho
usato la funzione per i miei effetti dhtml.
Poi ho notato una cosa strana: i layer che venivano traslati venivano
spostati -scusatemi la terminologia da fisico- anziché con moto rettilineo
uniforme, con moto accelerato, quasi che il delay del Timeout partisse da
una quantità c e venisse, ad ogni richiamo della funzione trasla,
decrementato di una certa quantità.
Avevo provato ad usare questa funzione su un layer span in modo da avere lo
stesso effetto di un tag <marquee> ma il risultato è stato che ad ogni nuovo
passaggio, il testo scorreva sempre più velocemente fino ad arrivare ad un
effetto di blinking.
Ripeto, può darsi che abbia codificato male le mie istruzioni, ma
sinceramente mi sembra che questo strumento non si presti a tante
interpretazioni.
Aspetto i vostri commenti e/o correzioni.
Cia Cia
fil

probabilmente hai generato qualche effetto "somma" dei px..........
cmq se vuoi vedere un 'esempio  guarda Intro DHTML negli staffscripts di
http://www.jsdir.com
ho usato setTimeOut in tutte le salse.........:-))))))))))))
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

 Cia Cia
Anche io alcuni mesi fà (novembre-dicembre) avevo perso molto tempo per
risolvere questi problemi, in particolare ricordo molto bene che riscontravo
anche io il problema dell' accelerazione dei layer che muovevo, ora non
ricordo quale fosse il problema, ma era sicuramente dovuto alla sintassi
dello script, perché provando a spostare e scambiare i vari metodi e
chiamate avevo risolto il problema.
Ti posto lo script funzionante cosi lo puoi confrontare con il tuo.
Per quanto riguarda il passo dello spostamento ed il delay penso che il
risultato dell'animazione dipenda anche da caratteristiche hardware quali
velocità del processore e prestazioni della scheda video.
Ciao e spero di esserti stato d' aiuto.
Massimo
P.S. non sono certo un genio in Javascript perciò se qualcuno vuole fare
critiche o commenti al codice seguente ben vengano.
###############################################################
<HTML>
<HEAD>
<TITLE></TITLE>
<SCRIPT TYPE="text/javascript">
function Show(){
   var nav="";
   if(document.layers)
   nav="NN4x";
   if(document.all)
   nav="IE4x";
   if((document.getElementById) && (navigator.appName == "Netscape"))
   nav="NN6x";
   if((document.getElementById) && (navigator.appName == "Microsoft Internet
Explorer"))
   nav="IE5x";
   if((document.getElementById) && (navigator.appName == "Opera"))
   nav="OP5x";
   //alert(nav+"********"+ navigator.appName);
   return nav;
}
var nav= Show();
var i=0
function sposta(){
//alert(nav)
 if(nav=="NN4x"){
  if(i<window.innerWidth-100){
  i=i+3;
  document.layers['gino'].pageX= i;
  timerID=setTimeout('sposta()',50);
  }
  if(i>window.innerWidth-100){
  i=i+3;
  document.layers['gino'].pageX= i;
  }
 }
 if(nav=="IE4x" || nav=="IE5x"){
  if(i<document.body.clientWidth-100){
  i=i+3;
  document.all['gino'].style.left= i;
  timerID=setTimeout('sposta()',50);
  }
  if(i>document.body.clientWidth-100){
  i=i+3;
  document.all['gino'].style.left= i;
  }
 }
 if(nav=="NN6x"){
  if(i<window.innerWidth-100){
  i=i+3;
  document.getElementById('gino').style.left= i;
  timerID=setTimeout('sposta()',50);
  }
  if(i>window.innerWidth-100){
  i=i+3;
  document.getElementById('gino').style.left= i;
  }
 }
}
</SCRIPT>
</HEAD>
<BODY>
<DIV ID="gino" style="position:absolute; left:0; top:150; width:100;
height:50; font:100 28px Arial; background-color:green"><BR>GINO</DIV>
<FORM>
<INPUT TYPE="button" VALUE="Navigator" onClick="alert(nav)">
<INPUT TYPE="button" VALUE="sposta()" onClick="sposta()">
</FORM>
</BODY>
</HTML>

 ha scritto nel messaggio
news:97toho$qr8bp$1...@ID-73994.news.dfncis.de...


 ha scritto nel messaggio
news:97toho$qr8bp$1...@ID-73994.news.dfncis.de...


 ha scritto nel messaggio
news:0gPo6.86644$Y93.2...@news.infostrada.it...
