Вы не должны увеличивать myTimer, потому что он хранит значение интервала, который вам необходимо остановить позже с помощью clearInterval(myTimer)
.Вместо этого у вас должна быть переменная типа timeElapsed, о которой @Programnik упоминает в своем комментарии.
Также имейте в виду, что любой javascript, отсутствующий в функции в вашем файле timer.js, будет запущен, как только он будет загружен.Это означает, что setInterval(start, 1000)
будет работать сразу же.Вместо этого вы должны иметь setInterval
в вызове, чтобы начать.Обратите внимание, что это будет делать новый setInterval каждый раз, когда вызывается start.Я бы порекомендовал создать метод с именем tick или что-то подобное, чтобы ваш код работал примерно так:
var timeElapsed = 0;
var myTimer;
function tick(){
timeElapsed++;
document.getElementById("time").innerHTML = timeElapsed;
}
function start(){
//call the first setInterval
myTimer = setInterval(tick, 1000);
}
function stop(){
clearInterval(myTimer);
}
function reset(){
//some combination of tick and stop
}
Вы можете заметить, что можно спамить кнопку запуска и заставить таймер работать очень быстро.Это можно решить, если вы инициализируете myTimer
чем-то вроде -1, а затем проверяете if(myTimer == -1)
при попытке запуска.Вам также придется сбросить myTimer
на -1 в вашем методе остановки, чтобы таймер можно было возобновить.Вы также можете сделать то же самое в методе stop.
Чтобы при запуске показывать таймер 0, вы можете просто сделать это: <span id="time">0</span>
Надеюсь, это полезно, этомой первый ответ о переполнении стека за долгое время
Редактировать: Вот код, который я написал, отвечая на ваш вопрос:
<!DOCTYPE html>
<html lang = "en">
<head>
<title>Stopwatch</title>
</head>
<body>
<div>Seconds: <span id="time">0</span></div>
<input type="button" id="startTimer" value="Start Timer" onclick="start();"><br/>
<input type="button" id="stopTimer" value="Stop Timer" onclick="stop();"><br/>
<input type="button" id="resetTimer" value="Reset Timer" onclick="reset();"><br/>
<script>
var timeElapsed = 0;
var timerID = -1;
function tick() {
timeElapsed++
document.getElementById("time").innerHTML = timeElapsed;
}
function start() {
if(timerID == -1){
timerID = setInterval(tick, 1000);
}
}
function stop() {
if(timerID != -1){
clearInterval(timerID)
timerID = -1
}
}
function reset() {
stop();
timeElapsed = -1;
tick()
}
</script>
</body>
</html>