2013-12-08 4 views
-1

Я работаю над этим таймером javascript и не могу понять, почему он не останавливается, когда часы, минуты и секунды равны нулю.Таймер не заканчивается, когда он достигает нуля

Код:

var s= 18000; 
var h= Math.floor(s/3600); 
s-= h*3600; 
var m= Math.floor(s/60); 
s -= m*60; 
var counter=setInterval(timer, 1000); //1000 will run it every 1 second 

function timer() 
{ 
    if(s == 0){ 
    if(m == 0){ 
     h=h-1; 
     s=59; 
     m=59; 
     if(h == 0){ 
     clearInterval(counter); 
     } 
    } else { 
     m=m-1; 
     s=59; 
    } 
    //Do code for showing the number of seconds here 
    } else { 
    s = s - 1; 
    } 
    document.getElementById("timer").innerHTML=h+'hrs '+m+'min '+s+'secs '; 
} 
+0

Я думаю, что ваш счетчик останавливается на одну секунду после того, как ровно 1 час на прилавке. (0:59:59) – Sumurai8

+0

Это потому, что вы *** a *** вычитаете 1 из h *** b *** установите s на 59 *** c *** установите m на 59. Если вы закомментируете эти три строки и установите s на начальное значение 10, а не 1800, таймер остановится через 10 секунд. – enhzflep

ответ

0

Проблема, как представляется, логика в этом разделе здесь ...

if(s == 0){ 
    if(m == 0){ 
     h=h-1; // what if h is also 0 here?? this would set it negative 
     s=59; 
     m=59; 
     if(h == 0){ 
     clearInterval(counter); 
     } 

Я думаю, что вы должны делать свой if(h==0) чек раньше ... перед тем, как декремент ценности. Таким образом, вы можете запустить свой блок if else с помощью if (s == 0 && m == 00 && h == 0) и использовать его для очистки интервала. Если все уже равно нулю, вы не хотите изменять больше значений.

1

Проблема, которую я вижу в том, что вы будете уменьшать h переменные на 1, когда все переменное время - и временных переменных Я имею в виду h, m и s устанавливаются в ноль:

if(s == 0) { 
    if(m == 0) { 
     h=h-1; 
     s=59; 
     m=59; 
// more code goes here 

Так h будет -1, и таймер никогда не остановится.
Лучшее, что я могу предложить, - полностью переписать свой таймер и использовать здесь только секунды. Каждый раз, когда вызывается функция timer, вы проверяете, равен ли s нулю - если это так, вы останавливаете таймер. В противном случае вы уменьшите s на 1. Чтобы обновить внутренний HTML-код #timer, вы можете пересчитать количество часов, минут и секунд при каждом вызове метода timer - это решение будет намного проще понимать и поддерживать, чем цепочка вложенных условных операторов.

+0

Просто, когда я подумал, что я получаю кое-что .. – crm

+0

Я получаю первую часть, которую вы говорите. Но для отображения часов, минут и секунд вы предполагаете, что я рассчитываю часы, минуты и секунды каждую секунду? – crm

+0

@crm да, вот что я предлагаю. – aga

Смежные вопросы