Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Ritardo in ciclo While

  1. #1

    Ritardo in ciclo While

    Ciao,

    ho necessità di inserire un ritardo nell'esecuzione di un ciclo while. Ma lui se ne frega:

    function f1()
    {
    ..................
    while(step1 > 0){
    rTemp1 = rTemp1 + rDelta1;
    step1 -= 1;

    setTimeout(function(){},100);
    }
    }

    Consigli???

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ciao benvenuta/o, prova cosi:
    codice:
    function f1()
    {
    ..................
    while(step1 > 0){
    rTemp1 = rTemp1 + rDelta1;
    step1 -= 1;
    }
    setTimeout(function(){f1()},100);
    }


    P.S. Quando posti del codice usa il tasto [code]
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Così verrebbe rieseguito anche tutto il codice prima del while.
    Inoltre visto che le variabili sono locali non sono sicuro che nella successiva chiamata lo scope le renda leggibili. Temo di no.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    perche non ci spieghi cosa vuoi ottenere? quello che vuoi fare non mi pare abbia molto senso...

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    a questo punto casserei in toto il while

    codice:
    function f() {
        
        /* setup code */
        var step1 = 100;
    
        (function f_inner() {
    
            rTemp1 += rDelta1;
    
            if (--step1) {
               setTimeout(f_inner, 100);
            }
        }());
    }
    Esempio su jsBin (apri la console e clicca su "run with JS") http://jsbin.com/osatup/2/edit
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    perche non ci spieghi cosa vuoi ottenere? quello che vuoi fare non mi pare abbia molto senso..
    Mi serve per tutti gli effetti di dissolvenza e sfumatura del colore. Senza un ritrardo l'effetto non è percepibile ma è istantaneo.

    Originariamente inviato da fcaldera
    a questo punto casserei in toto il while

    codice:
    function f() {
        
        /* setup code */
        var step1 = 100;
    
        (function f_inner() {
    
            rTemp1 += rDelta1;
    
            if (--step1) {
               setTimeout(f_inner, 100);
            }
        }());
    }
    Esempio su jsBin (apri la console e clicca su "run with JS") http://jsbin.com/osatup/2/edit
    Ah pensavo non si potessero annidare le funzioni in javascript. Così risolvo il problema.
    Grazie mille.

    Solo mi spieghi perchè si mettono le doppie parentesi tonde () pure alla fine della funzione f_inner oltre che dopo il nome della funzione???

  7. #7
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da WebDeveloper3
    Solo mi spieghi perchè si mettono le doppie parentesi tonde () pure alla fine della funzione f_inner oltre che dopo il nome della funzione???
    di norma una funzione viene definita con

    codice:
    function f() {
      ...
    }
    ed eseguita con

    codice:
    f()
    con la notazione

    codice:
    (function f() {
      ...
    }())
    definisci ed eseguila funzione f allo stesso tempo (se ci pensi, come fa il codice ad eseguire la funzione inner la prima volta?)

    inoltre l'identificatore f resta visibile all'interno dello scope stesso quindi puoi chiamare la funzione all'interno del suo scope
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  8. #8
    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.