Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    evitare code di setTimeout

    ciao a tutti! ho notato che se faccio una cosa tipo:
    codice:
    for(j=0;j<10;j++){
         setTimeout(function(){
              alert(j);
         },500*j);
    }
    ogni 500 secondi mi stampa 9... è come se il for richiamasse e accodasse dieci volte quello che c'è nel setTimeout e quindi non stampa la j che si incrementa gradualmente ma la j che ormai è già incrementata al massimo del for... non so se la mia supposizione è giusta, ma c'è il modo per dire, finchè non hai eseguito tutto quello che è contenuto nel setTimeout non proseguire?
    grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    E' un timer e va fino a che non arriva a 0 come tutti timer comunque no non puoi bloccare l'esecuzione devi sviluppare l'operazione diversamente
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    3a discussione dove giri intorno alla stessa questione,
    concentra tutto in una che sia una

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    è lo so... c'hai ragione... è solo che non so mai come comportarmi... perchè poi spesso mi dicono di aprire un nuovo thread per ogni discussione... e prima ero passato dal animare un oggetto col move di jquery, poi con il setTimeout e ora devo capire un altra cosa... vi spiego bene cosa devo fare... così mi dite il metodo corretto io ho creato con js una mappa isometrica che allinea i vari quadratini (disegnati tipo rombo) in modo da creare un rombone grosso che sarebbe la mia mappa... ho anche fatto che uno può mettere le varie costruzioni nel gioco, spostarle ecc... è perfetto! manca solo l'omino che si muove e poi può essere la base per qualunque gioco...io devo fare che se clicco su uno dei tanti quadratini della mappa, l'omino si incammina verso il punto... quindi io faccio il for (tipo quello a inizio thread) che fa 10 giri (il movimento del passo sono 10 immagini)... tutto questo però, lo devo mettere in un while che dice... ripeti questa operazione finche il punto dove si trova l'omino è uguale al punto che è stato cliccato, solo che se i timeout si accodano senza essere eseguiti il punto in cui si trova l'omino non verrà mai aggiornato e si entra in un ciclo infinito... come faccio?

  5. #5
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ora che l'hai spiegato e che non ci ho capito nulla, t'auguro di risolvere
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    provo a spiegarmi meglio
    io ho una mappa con su un omino
    se clicco su un punto della mappa questo omino deve camminare e raggiungere il punto cliccato
    io per far der l'effetto della camminata uso un for con il timeout come quello a inizio thread... e fin qui va... solo che devo fare un click per ogni passo...
    quindi ho pensato, lo metto in un while, che ripete questo for finchè l'omino non si trova sul punto cliccato...
    solo che se questi setTimeout, non li esegue subito, quando sono chiamati, e non ne fa uno per volta è un problema... perchè l'omino rimane immobile e quindi non uscirà mai dal while...

  7. #7

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    io ho scritto, per fare una prova questo script... magari l'ho scritto male... ma così non va, perchè non esce mai dal while... io vorrei che ogni ciclo eseguisse i++ così che in 5 giri esce dal while... col firebug invece vedo che non lo esegue nemmeno una volta
    codice:
    <script type="text/javascript">
    var tempo, i=0;
    while(i!=5){
    	tempo=setInterval(function(){
    		alert(i);
    		i++;
    	},1000);
    }
    clearInterval(tempo);
    </script>

  9. #9
    senza il while! setInterval è ricorsivo da sè.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    mmm... ok... li funziona di certo e non mi stravole tutto più di tanto... perfetto! grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.