Newsgroup: it.comp.lang.javascript
Titolo: Chiamare funzione ad intervalli regolari

Ciao,
vorrei fare in modo che una volta finito di caricare tutti gli elementi 
della pagina venga chiamata una funzione ogni N secondi.
Qual'e' il metodo migliore per farlo?
grazie, ciao
Mauro



setInterval

 venga chiamata una funzione ogni N secondi.
https://developer.mozilla.org/en/DOM/window.setInterval

 
https://developer.mozilla.org/en/DOM/window.setInterval
Grazie mille !!!
Approfondisco la questione chiedendoti un ulteriore info.
La funzione che chiamo deve ciclare tra gli N elementi di un array che 
ho in precedenza popolato.
Io ho creato un array globale dentro cui ci metto i dati tra cui 
ciclare, adesso vorrei che alla prima chiamata venga utilizzato il primo 
elemento dell'array, alla seconda chiamata il secondo elemento e alla 
N+1 chiamata venga richiamato di nuovo il primo elemento.
E' fattibile?
grazie infinite, ciao
Mauro

 N+1 chiamata venga richiamato di nuovo il primo elemento.
con setInterval non puoi passare ogni volta un parametro diverso, quindi:
a) o crei una var globale e incrementi quella, e leggi quella nella 
function
b) o, anzichè setInterval, usi setTimeout, così ogni volta che lo 
richiami gli passi il valore corretto:
 
https://developer.mozilla.org/en/DOM/window.setTimeout
per riniziare dal primo basta confrontare la length dell'array, se 
maggiore o uguale risetti la var a zero.
Oppure puoi usare il modulo (var % array.length):
 
https://developer.mozilla.org/en/JavaScript/Reference/Operators/
Arithmetic_Operators#.25_%28Modulus%29

 E' fattibile?
certo con un operatore aritmetico che si chiama modulo , e che in 
javascript si fa con %
quindi variabile globale  (N)che incrementi all'interno della funzione 
che chiami dentro setinterval 
e alert(tuoarray.length%N);
di sicuro ci va un -1 da qualche parte visto l'array comincia la 
numerazione degli elementi da zero, a te scoprire dove metterlo :)

 e alert(tuoarray.length%N);
ovviamente devi invertire gli operandi!

 numerazione degli elementi da zero, a te scoprire dove metterlo:)
Grazie a tutti per i consigli, funziona perfettamente !!!
Ho risolto anche l'inghippo del -1,ma c'e' una cosa che non capisco, ok 
che la numerazione parte da zero, ma se io faccio
var indice_array = 0;
var coordinateArray = [];
coordinateArray.push(marker1.position);
coordinateArray.push(marker2.position);
coordinateArray.push(marker3.position);
come mai coordinateArray.lenght mi ritorna 4 ???
Infatti ho dovuto fare
if (indice_array < markersArray.length-1)
     {
     // eseguo le operazioni
     // passo all'elemento successivo
     indice_array++;
     }
   else
     {
     // riparto dal primo elemento
     indice_array = 0;
     }
invece di
if (indice_array < markersArray.length)
come mi sarei aspettato.
ciao
Mauro

 numerazione degli elementi da zero, a te scoprire dove metterlo:)
Il 22/02/2011 16:18, RedWiz ha scritto:
 > di sicuro ci va un -1 da qualche parte visto l'array comincia la
 > numerazione degli elementi da zero, a te scoprire dove metterlo:)
Grazie a tutti per i consigli, funziona perfettamente !!!


 if (indice_array < markersArray.length-1)
così perdi l'ultimo ... c'è qualcosa che non va nel tuo codice.

 così perdi l'ultimo ... c'è qualcosa che non va nel tuo codice.
ah, ecco !!!
Adesso controllo meglio.
Senti, ma è normale che quando la mia pagina è in esecuzione con il loop 
firefox mi occupa la cpu perennemente al 50% ( Pentium Dual Core @2.7GHz)??
Non è che ho toppato qualcosa nella chiamata?
<body onLoad="cicla()">
function cicla()
   {
   intervalID = setInterval(pan, 2000);
   }
   function pan()
   {
    if (indice_array < markersArray.length)
     {
     map.panTo(coordinateArray[indice_array]);
     indice_array++;
     }
   else
     {
     indice_array = 0;
     map.panTo(coordinateArray[indice_array]);
     }
   }
ciao
Mauro

    }
dovresti poterla ridurre in un modo simile:
 indice_array%=coordinateArray.length;
 map.panTo(coordinateArray[indice_array]);

   map.panTo(coordinateArray[indice_array]);
provo subito !
grazie, ciao
Mauro

 cosa intendi per chiamare il setTimeout dopo il panTo ?
richiami all'inizio con setTimeout (anziché setInterval), e solo dopo il 
panTo chiami nuovamente il setTimeout. 
Quelle api non mettono a disposizione una callback al termine 
dell'animazione?

 panTo chiami nuovamente il setTimeout.
Ok, proverò in questo modo, grazie !
ciao
Mauro

>
settimeout
quanto ci impega la tua funzione x a terminare ?
e se mettiamo 5 secondi ed e' una chiamata ajax
alla fine della tua funzioni chiami quella che la fa ripartire cosi la 
puoi richiamare a se stessa da quando e' finita

 puoi richiamare a se stessa da quando e' finita
concordo, per questo chiedevo se c'era una callback al termine...

 concordo, per questo chiedevo se c'era una callback al termine...
non so come verificare se c'e' una callback al termine :-(
Comunque pare che con la soluzione che mi hai proposto funziona tutto bene.
grazie, ciao
Mauro