2010-11-09 2 views
0

Я начал работать над таймером, чтобы показать, как долго люди были на моей странице. Проблема в том, что вместо подсчета секунд он просто добавляет нули до конца. Может ли кто-нибудь показать мне, где я ошибся?ошибка таймера javascript

<script language="javascript"> 
<!-- 
var seconds = 0 
var minutes = 0 
document.getElementById('timer').innerHTML = '0' 
function Timer() { 
    if (seconds < 10) { 
     seconds = "0" + seconds 
    } 
    else if (minutes < 10) { 
     minutes = "0" + minutes 
    } 
    else if (seconds >= 59){ 
     seconds = 0 
     minutes += 1 
    } 
    else 
     seconds += 1 
     document.getElementById('timer').innerHTML = "You've been on my blog for "+minutes+" : "+seconds+" minutes." 
     setTimeout("Timer()",1000) 
} 
//--> 
</script> 

ответ

2

Ну да, потому что вы конкатенируете строку. Оператор + выполняет как конкатенацию, так и добавление.

"0" + foo // concatenate the string "0" and foo 
0 + foo // add foo to 0 (given that both are numbers) 

Вы все же используете таймер. Ваш скрипт не гарантирует выполнение вовремя, любая небольшая задержка в исполнении даст вам накопительное неправильное значение. Правильный способ сделать таймер - принять фиксированное время начала и использовать его как базу для вычисления разницы каждую секунду или около того.

var start = Date.now(); 
function timer() { 
    alert(((Date.now() - start)/1000) + ' seconds elapsed'); 
} 
setInterval(timer, 1000); 
+0

вы избили меня до него. только добавив, что parseInt() получит вам int val из строки, если это необходимо. – zzzzBov

+0

Но я добавляю начальный ноль к секундам и минутам, пока они не пройдут десять, поэтому вместо, например, пять минут и три секунды - 5: 3, это будет 05:03, разве это не должно быть строка для этого? – Tommy

+0

@Tommy Сначала вам нужно правильно отслеживать ** числовое значение **. Форматирование времени с ведущими нулями - отдельная проблема. – deceze

0

Вы переключая тип переменной для секунд от того:

var seconds = 0 // integer type 
.... 
seconds = "0" + seconds // now seconds is holding a string! 

секунд (и минут) должны быть только целые числа.

Кроме того, просто сосредоточьтесь на секундах. Позже разделите его на 60, чтобы отобразить количество минут. секунд% 60 будет оставшееся число секунд.

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