Visualizzazione risultati 1 fino 4 di 4

Discussione: [javascript] Countdown

  1. #1
    Guest

    Predefinito [javascript] Countdown

    Salve a tutti, premetto che non conosco il javascript, ma (purtroppo :P) ho la necessità di creare un countdown in una mia pagina, e quindi mi ci sono dovuto cimentare. I dati vengono presi da un database, fatti gli opportuni calcoli si ricavano le ore rimanenti, i minuti rimanenti e i secondi. Si passano queste variabili ad una funzione che dovrebbe effettuare il countdown. Per ora lasciamo perdere la parte dal database e i relativi calcoli (che ho già pronti), ma passiamo direttamente al countdown. Girando quì e per la rete ho trovato un codice che dovrebbe fare al caso mio:

    Codice:
    <?php
    
    $remainingHour    = 10;
    $remainingMinutes = 10;
    $remainingSeconds = 10;
    
    ?>
    
    <html>
    <head>
    
    <script type="text/javascript">
    
      var hours = <?php echo $remainingHour; ?>
      var minutes = <?php echo $remainingMinutes; ?>
      var seconds = <?php echo $remainingSeconds; ?>
    
    function setCountDown ()
    {
      seconds--;
      if (seconds < 0){
          minutes--;
          seconds = 59
      }
      if (minutes < 0){
          hours--;
          minutes = 59
      }
      if (hours < 0){
          days--;
          hours = 23
      }
      document.getElementById("remain").innerHTML =hours+" hours, "+minutes+" minutes, "+seconds+" seconds";
      setTimeout ( "setCountDown()", 1000 );
    }
    
    </script>
    </head>
    
    <body onload="setCountDown();">
    
            <table>
               <tr><td id="remain"><?php echo "$remainingHour hours, $remainingMinutes minutes, $remainingSeconds seconds";?></td></tr>
           </table>
    
    </body>
    </html>
    Insomma, ho delle variabili che contengono i minuti i secondi e le ore rimaste. Le passo ad una funzione js che dovrebbe decrementare ogni secondo (facendo i dovuti controlli). La funzione è ricorsiva, quindi attende un secondo (setTimeOut) e ricomincia a funzionare. La logica mi sembra corretta, ed è per questo che sto impazzendo. Il risultato che ottengo è questo http://mahat.altervista.org/broswer/prova.php, cioè vedo 10:10:10 (che sono i valori che ho imposto provvisoriamente nelle variabili) ma non viene decrementato un bel nulla!
    Se qualcuno avesse 5 minuti per correggere quelle poche righe di codice e dirmi dove sbaglio mi farebbe un immenso favore (senza contare che mi eviterebbe un esaurimento).
    Attendo fiducioso!

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,753

    Predefinito

    mancano i punti e virgola.

    Sostituisci:
    Codice:
    var hours = <?php echo $remainingHour; ?>
      var minutes = <?php echo $remainingMinutes; ?>
      var seconds = <?php echo $remainingSeconds; ?>
    con:

    Codice:
    var hours = <?php echo $remainingHour; ?>;
      var minutes = <?php echo $remainingMinutes; ?>;
      var seconds = <?php echo $remainingSeconds; ?>;
    ---

    in javascript, la console degli errori (nei browser) può aiutare molto

    Ciao!
    Ultima modifica di alemoppo : 13-07-2011 alle ore 12.17.09

  3. #3
    Guest

    Predefinito

    alemoppo sei il mio eroe! Essendo il mio primo approccio al javascript ci avrei messo una vita ad accorgermi di quell'errore! Mi hai risparmiato un sacco di fatica XD Anche perchè dicevo "la logica è giusta, l'errore dev'essere di sintassi". Grazie ancora!

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Sì, mancano i punti e virgola, ma se le istruzioni sono su righe diverse non sono necessari (benché ritengo che per correttezza e altro debbano essere comunque messi).
    Il problema è che nel codice qui riportato le dichiarazioni delle variabili sono su righe diverse, ma guardando il sorgente della pagina riportata no (mi chiedo, perché?).
    Comunque un codice di questo genere potrebbe portare dei problemi, setInterval potrebbe richiamare la tua funzione un po' troppo presto o un po' troppo tardi, e queste (grandi) variazioni si accumuleranno, portando a scrivere un'informazione scorretta.
    Un metodo migliore è quello di immagazinare la data dell'evento in un'unica variabile, creando un oggetto Date, e poi confrantarlo con l'ora attuale nella funzione richiamata da setTimeout.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •