2015-07-08 1 views
0

Мой таймер обратного отсчета не останавливается 00:00, он просто продолжает движение до тех пор, пока он не достигнет «-01: 59», а затем «-02: 59» и так далее, я изменил часть кода здесь и там, но она по-прежнему продолжает идти и идтиТаймер не останавливается в 00:00

<html> 

<head> 
    <title>Countdown</title> 
    <script type="text/javascript"> 
    // set minutes 
    var mins = 1; 

    // calculate the seconds (don't change this! unless time progresses at a  different speed for you...) 
    var secs = mins * 60; 

    function countdown() { 
     setTimeout('Decrement()', 1000); 
    } 

    function Decrement() { 
     if (document.getElementById) { 
      minutes = document.getElementById("minutes"); 
      seconds = document.getElementById("seconds"); 
      // if less than a minute remaining 
      if (seconds < 59) { 
       seconds.value = secs; 
      } else { 
       minutes.value = getminutes(); 
       seconds.value = getseconds(); 
      } 
      secs--; 
      setTimeout('Decrement()', 1000); 
     } 
    } 

    function getminutes() { 
     // minutes is seconds divided by 60, rounded down 
     mins = Math.floor(secs/60); 
     return ("0" + mins).substr(-2); 
    } 

    function getseconds() { 
     // take mins remaining (as seconds) away from total seconds remaining 
     return ("0" + (secs - Math.round(mins * 60))).substr(-2); 
    } 
    </script> 
</head> 

<body> 
    <div id="timer"> 
     This is only valid for the next 
     <input id="minutes" type="text" style="width: 60px; border: none; background-color:none; font-size: 50px; font-weight: bold;"> : 
     <input id="seconds" type="text" style="width: 60px; border: none; background-color:none; font-size: 50px; font-weight: bold;"> 
    </div> 
    <script> 
    countdown(); 
    </script> 
+0

Кажется, что вы не очищаете свой тайм-аут, это то, что вы хотите? –

+0

Почему вы думаете, что 'Decrement' должен прекратиться, если вы начнете новый тайм-аут, независимо от значения' minutes' и 'seconds'? – Andreas

+0

FYI: setTimeout НЕ ТОЧНО, ваш результат таймера будет неправильным. – epascarello

ответ

2

Здесь вы: должно назначить SetTimeout переменного, когда секунды 0, очистить тайм-аут.

 // set minutes 
 
    var mins = 1; 
 

 
    // calculate the seconds (don't change this! unless time progresses at a  different speed for you...) 
 
    var secs = mins * 10; 
 
    var timeout; 
 

 
    function countdown() { 
 
     timeout = setTimeout('Decrement()', 1000); 
 
    } 
 

 
    function Decrement() { 
 
     if (document.getElementById) { 
 
     minutes = document.getElementById("minutes"); 
 
     seconds = document.getElementById("seconds"); 
 
     // if less than a minute remaining 
 
     if (seconds < 59) { 
 
      seconds.value = secs; 
 
     } else { 
 
      minutes.value = getminutes(); 
 
      seconds.value = getseconds(); 
 
     } 
 
     secs--; 
 
     if (secs < 0) { 
 
      clearTimeout(timeout); 
 
      return; 
 
     } 
 
     countdown(); 
 
     } 
 
    } 
 

 
    function getminutes() { 
 
     // minutes is seconds divided by 60, rounded down 
 
     mins = Math.floor(secs/60); 
 
     return ("0" + mins).substr(-2); 
 
    } 
 

 
    function getseconds() { 
 
     // take mins remaining (as seconds) away from total seconds remaining 
 
     return ("0" + (secs - Math.round(mins * 60))).substr(-2); 
 
    } 
 
    countdown();
<div id="timer">This is only valid for the next 
 
    <input id="minutes" type="text" style="width: 60px; border: none; background-color:none; font-size: 50px; font-weight: bold;">: 
 
    <input id="seconds" type="text" style="width: 60px; border: none; background-color:none; font-size: 50px; font-weight: bold;"> 
 
</div>

Надеется, что это помогает.