Ir para conteúdo
F_Jr

Explicação do código de contagem regressiva

Recommended Posts

Boa Tarde Galera!

Achei esse código na internet e ele funcionou legal, só que pra min não adianta só copiar e colar e falar que ele está funcional. Na verdade quero entender o que cada linha de código está fazendo, a maioria eu sei o que está fazendo até deixei ele comentado.

Segue o código abaixo:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Contagem Regressiva</title>
    <script type="text/javascript">
      
      var horas = '00'; //DEFINE A QUANTIDADE DE HORAS
      var minutos = '00'; //DEFINE A QUANTIDADE DE MINUTOS
      var segundos = 10; //A QUANTIDADE DE SEGUNDOS JÁ ESTÁ DEFINIDO
      
      function ContRegres(){ //AQUI FOI CRIADO UMA FUNÇÃO CHAMADO ContRegres
         segundos--; //OS SEGUNDOS VAI DECREMENTANDO
         
         if(segundos < 0){ //AQUI ESTÁ DIZENDO SE SEGUNDOS FOR MENOR 0 ELE IRÁ RECEBER 59
            segundos = 59;
            
            minutos--; //OS MINUTOS VAI DECREMENTANDO
            if(minutos <= 9){ //AQUI ESTÁ DIZENDO SE MINUTOS FOR MENOR IGUAL A 9 ENTÃO ACRESCENTE O 0 A ESQUERDA. EX 09, 08, 07, ETC...
               minutos = '0' + minutos;
            }
         }
         
         if(minutos == '0-1'){ //-->
            minutos = 5; //-->
            
            horas--; //AS HORAS VAI DECREMENTANDO
            if(horas <= 9){ //AQUI FUNCIONA O MESMO PRINCÍPIO DOS MINUTOS, SEMPRE COLOCANDO O 0 A ESQUERDA
               horas = '0' + horas;
            }
         }
         
         if(segundos <= 9){ //AQUI FUNCIONA O MESMO PRINCÍPIO DOS MINUTOS E DAS HORAS, SEMPRE COLOCANDO O 0 A ESQUERDA
            segundos = '0' + segundos;
         }
         
         if(horas == '0-1'){ //-->
            horas = '00';
            minutos = '00';
            segundos = '00';
            
            //NA LINHA ABAIXO MOSTRA NA TELA O RESULTADO FINAL QUANDO FOR 00:00:00 E UMA MENSAGEM DE TEMPO FINALIZADO
            clock1.innerHTML = horas + '<font color=#000>:</font>' + minutos + '<font color=#000>:</font>' + segundos + '<font color=#250202><br />Tempo Finalizado!</font>';
         }
         else{
            clock1.innerHTML = horas + '<font color=#000>:</font>' + minutos + '<font color=#000>:</font>' + segundos;
            setTimeout('ContRegres()',1000); //AQUI ESTOU A MINHA FUNÇÃO E O TEMPO EM MILISSEGUNDOS POR PARÂMETRO PARA O setTimeout
         }
      }
    </script>
  </head>
 
  <body>
    <h2 align="center"><font color="#065ca5" face="tahoma">Contagem Regressiva</font></h2>
    <hr color="#065ca5" width="100">
    <div align="center">
      <b><font color=#ff0000 size=2 face=arial><span id="clock1"></span><script>setTimeout('ContRegres()',1000);</script></font></b><br>
    </div>
  </body>
</html>

Onde que tiver marcado por //--> duas barras, dois traços e uma setinha pra frente é onde que eu tive a dificuldade para entender o que o código está fazendo. Se possível e alguém mais experiente possa me explicar o que o código está fazendo nesta linhas em que coloquei as //-->.

Desde Já, Agradeço pelo compreensão de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(minutos == '0-1'){ //-->
  minutos = 5; //-->
if(horas == '0-1'){ //-->
é um bug do código que o cara que fez resolveu de uma forma nada elegante.

Existem contadores melhores e com códigos mais bem escritos.

exemplo:

http://wbruno.github.io/examples/time-counter/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chega uma hora que o minuto é -1, ai ele entra nesse if e concatena o 0 na frente, '0' + '-1' = '0-1';

if(minutos <= 9){ 
   minutos = '0' + minutos;
}

Ai ele 'corrige' isso no if abaixo;

if(minutos == '0-1'){ //-->
   minutos = 5; //-->

O mesmo acontece com a hora.

E de fato, como disse o William:

...resolveu de uma forma nada elegante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia Galera!

Willian Bruno e itlpps, obrigado pela resposta de vocês. Willian Bruno visualizei o seu código e achei interessante, mas como tenho pouco conhecimento em javascript não consegui compreender em parte o seu código.

Achei um outro código aqui na internet e ele está funcional, só que surgiu uma pequena dúvida. Segue o código abaixo:

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Contagem Regressiva</title>
    <script type="text/javascript">
      var tempo = new Number();
      tempo = 15; //TEMPO DADO EM SEGUNDOS. AQUI É LIVRE PARA MANIPULÁ-LO.
      
      function ContagemRegressiva(){
         if(tempo >= 0){
            var minutos = parseInt(tempo / 60);
	        
            var horas = parseInt(minutos / 60);
	        minutos = (minutos % 60);
	        
            var segundos = (tempo % 60);
            
            if(horas < 10){
               horas = '0' + horas;
               horas = horas.substr(0,2); //-->
            }
            
            if(minutos < 10){
               minutos = '0' + minutos;
               minutos = minutos.substr(0,2); //-->
            }
            
            if(segundos < 10){
               segundos = '0' + segundos;
            }
            
            setTimeout('ContagemRegressiva()',1000);
            tempo--;
            regressivo.innerHTML = horas + '<font color=#000>:</font>' + minutos + '<font color=#000>:</font>' + segundos;
            if((horas == 00) && (minutos == 00) && (segundos == 00)){
               regressivo.innerHTML = horas + '<font color=#000>:</font>' + minutos + '<font color=#000>:</font>' + segundos + '<font color=#250202><br />Tempo Finalizado!</font>';
            }
         }
         else{
            //AQUI FAREI O REDIRECIONAMENTO
         }
      }
      ContagemRegressiva();
    </script>
  </head>
  <body>
    <!--<p id="regressivo"></p>-->
    <h2 align="center"><font color="#065ca5" face="tahoma">Contagem Regressiva</font></h2>
    <hr color="#065ca5" width="100">
    <div align="center">
      <b><font color=#ff0000 size=2 face=arial><span id="regressivo"></span></font></b><br>
    </div>
  </body>
</html>

A minha dúvida aqui é onde está marcado //--> com duas barras, dois traços e uma setinha pra frente.

if(horas < 10){
   horas = '0' + horas;
   horas = horas.substr(0,2); //-->
   //horas = horas.substr(0,2); //-->
}

Reescrevi o código para melhor visualização. Minha pergunta é o seguinte é necessário ter esta linha do horas = horas.substr(0,2), porque ele tanto comentado como descomentado o tempo aparece para min assim: 00:00:15 e vai decrementando.

Fiz uma alteração no código só por questão de apresentação na tela do usuário. Segue a parte do código abaixo:

if((horas == 00) && (minutos == 00) && (segundos == 00)){
   regressivo.innerHTML = horas + '<font color=#000>:</font>' + minutos + '<font color=#000>:</font>' + segundos + '<font color=#250202><br />Tempo Finalizado!</font>';
}

Quero saber na opinião de vocês se esta parte do código que acrescentei está coerente.

Na verdade estou usando este código juntamente com o PHP através de sessões. Por exemplo no PHP defini o tempo de 20 minutos para o usuário que está logado, só que quero mostrar para o usuário o tempo restante que ele tem. Já que no PHP o tempo fica estático e no javascript ele é dinâmico e se caso o usuário dar um refresh na página ele volta para o tempo de 20 minutos e vai decrementando até ele dar um novo refresh ou a sessão dele expirar. Do lado do client-server deixei tudo validado se caso client-side estiver desabilitado.

Após ter feito isto, vou fazer um novo script para que mostre na tela do usuário o tempo total que ele ficou na página, tudo isto dinamicamente. O meu objetivo é o seguinte, durante o tempo de sessão do usuário quero mostrar o tempo progressivo e o tempo regressivo.

Desde já, agradeço pela cooperação de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezados, ótimo dia!
Não sou programador, tenho pouco conhecimento em HTML, mas inseri o código acima e funcionou muito bem, agradeço por terem compartilhado o mesmo na internet.

 

Mas uma dúvida me surgiu, sempre que atualizo a minha página, o contador volta ao início da contagem, teria algum comando que fizesse a contagem regressiva permanecer regredindo até uma data final por exemplo? 

 

Grato desde já

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.