Newsgroup: it.comp.lang.javascript
Titolo: Aspettare e rilevare che finiscano i setTimeout

Saluti a tutti!
Allora, sono riuscito a far alzare e abbassare un oggetto sullo schermo, al
passaggio del mouse su due zone della finestra, con due funzioni che rendono
più fluido il movimento tramite il setTimeout...Però! Se l'utente muovendo
velocemente il mouse passa ad esempio sulla zona di innesco dell' "abbassa"
e poi su quella di  "alza" prima che il movimento generato dalla prima
funzione sia completo entro in un loop: entrambe le funzioni di spostamento
sono attive e l'oggetto "vibra" sotto l'effetto dellle due funzioni.
Io vorrei mettere un controllo che rilevi il fatto che l'altra funzione di
spostamento è ancora attiva e aspetti che finisca l'ultimo setTimeout prima
di fare il proprio dovere.
Si può fare?
yanez

 ha scritto nel messaggio
news:vv1xa.54931$DN.13...@tornado.fastwebnet.it...

Non so fare quello che chiedi tu.
Pero' puoi sempre, prima di avviare una funzione che utilizza il
setTimeout(), resettare il Timeout dell'altra funzione col comando
clearTimeout(); cosi' si blocca subito la funzione partita in precedenza e
poi si puo' far partire la nuova funzione.
Lo so, non e' la stessa cosa che avevi chiesto, pero' eviti sicuramente
l'effetto "vibra".
Ciao,
Ema

 Ema
Io stavo pensando alla seguente cosa..che non aspetta, però non farebbe
casini
function alza()
 {
  dichiarazioni
  timerup= setTimeout..
 }
function abbassa()
 {
  dichiarazioni
  timerdown= setTimeout..
 }
funzione innescoalza()
 { if (!timerup)&&(!timerdown)
    {fai quello che devi fare}
 }
e analogamente per l'altra...però
1) non se javascript attribuisca valori booleani al fatto che un setTimeout
sia in escuzione
2) timerup e timerdown essendo locali non avrebbero senso....
questo problema mi sa che ci sarebbe anche nella tua soluzione...anche se mi
sa che ci si può lavorare

 ha scritto nel messaggio
news:vv1xa.54931$DN.13...@tornado.fastwebnet.it...

Per ora sto risolvendo controllando con degli if che ci si trovi o nello
stato iniziale o in quello finale; però l'argomento mi sembra interessante
comunque...thx

 2) timerup e timerdown essendo locali non avrebbero senso....
Infatti!
Io avevo in mente questo (anzi, mi pare di ricordare di averlo anche fatto,
in passato, per far scorrere un layer verso l'alto o verso il basso a
seconda che il mouse si trovasse su un pulsante piuttosto che su un altro -
questo serviva per evitare l'uso della scrollbar)
-----------------------------------------------
var timer;
function alza() {
  [dichiarazioni]
  clearTimeout(timer);
  ...
  timer= setTimeout(...);
 }
function abbassa() {
  [dichiarazioni]
  clearTimeout(timer);
  ...
  timer= setTimeout(...);
 }
-----------------------------------------------
Bisogna solo verificare se la clearTimeout() innesca o meno un errore se gli
si passa un timer a cui non è stato ancora assegnato un setTimeout() o un
timer gia' scaduto...
a te le prove!
Ciao,
Ema
PS. Ho fatto mentecapo. Se ti va puoi vedere (e copiare) il funzionamento di
quello che avevo combinato a
http://www.emanuelegranucci.it/aboutme/aboutme.html
Lascia perdere i contenuti. Quel sito e' fermo da tanto tanto tanto tempo.