// global setinterval timer
let countdownEnded = false;
let intervalSeconds = false;
let counter = -1; // reset must be counter = -1
// init
(() => {
updateDisplay(1800, 0);
document.getElementById('millis').innerHTML = "00";
//element.addEventListener("click", function(){ myFunction(p1, p2); });
})();
function start(time = 1800) {
let startTime = Date.now();
let inputTime =
counter === -1
? document.getElementById('minutesInputField').value * 60 || time
: counter
intervalSeconds = setInterval(() => {
let currentTime = Date.now() - startTime;
if (inputTime < 1) {
stop();
} else {
counter = inputTime - updateDisplay(inputTime, currentTime);
updateMillis();
}
}, 1000);
}
function pause() {
clearInterval(intervalSeconds);
interval = undefined;
}
function reset() {
}
function stop() {
let countDivElement = document.getElementById("countdown");
countDivElement.innerHTML = 'countdown done';
countdownEnded = true;
clearInterval(intervalSeconds);
}
function updateDisplay(seconds, currentTime) {
let timeIncrement = Math.floor(currentTime / 1000);
updateTime(seconds - timeIncrement);
return timeIncrement;
}
/**
* @method - updatesecondsond
* @summary - This updates the timer every seconds
*/
function updateTime(seconds) {
let countDivElement = document.getElementById("timer");
let minutes = Math.floor(seconds / 60);
let remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = '0' + remainingSeconds;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
if (seconds > 0) {
seconds = seconds - 1;
} else {
stop();
}
countDivElement.innerHTML = minutes + ":" + remainingSeconds + ":";
};
function updateMillis() {
let countMillsElement = document.getElementById('millis');
let counterMillis = 99;
let millis = 0;
let intervalMillis = setInterval(() => {
if (counterMillis < 0) {
clearInterval(intervalMillis);
counterMillis = 99;
} else {
millis = counterMillis < 10 ? counterMillis + '0' : counterMillis;
};
countMillsElement.innerHTML = millis;
counterMillis--;
}, 10);
if (countdownEnded) {
stop();
clearInterval(intervalMillis);
}
};
<div class="clock" id="model3">
<div id="countdown">
<span id="timer"></span><span id="millis"></span>
</div>
</div>
<input type="number" id="minutesInputField" placeholder="minutes" />
<div class="buttons">
<button class="btn start" onclick="start()">Start</button>
<button class="btn pause" onclick="pause()">Pause</button>
<button class="btn reset" onclick="reset()">Reset</button>
</div>
Я сделал обратный отсчет с помощью функций запуска, паузы и сброса. Функция запуска работает и делает паузу. Когда я нажимаю паузу, а затем запускаю, она продолжается, так что это идеально. Но если я хочу нажать «Сброс», необходимо сбросить количество минут, которое вводится в поле ввода. И если там ничего нет, потому что это по умолчанию на 30 минут, это должно быть 30 минут, когда вы нажимаете на кнопку сброса. Это моя проблема. Если кто-то может мне помочь? Спасибо!
<html>
<div class="clock" id="model3">
<div id="countdown">
<span id="timer"></span><span id="millis">
</span>
</div>
</div>
<input type="number" id="minutesInputField" placeholder="minutes" />
<div class="buttons">
<button class="btn start" onclick="start()">Start</button>
<button class="btn pause" onclick="pause()">Pause</button>
<button class="btn reset" onclick="reset()">Reset</button>
</div>
</html>
// global setinterval timer
let countdownEnded = false;
let intervalSeconds = false;
let counter = -1; // reset must be counter = -1
// init
(() => {
updateDisplay(1800, 0);
document.getElementById('millis').innerHTML = "00";
//element.addEventListener("click", function(){ myFunction(p1, p2); });
})();
function start(time = 1800) {
let startTime = Date.now();
let inputTime =
counter === -1
? document.getElementById('minutesInputField').value * 60 || time
: counter
intervalSeconds = setInterval(() => {
let currentTime = Date.now() - startTime;
if (inputTime < 1) {
stop();
} else {
counter = inputTime - updateDisplay(inputTime, currentTime);
updateMillis();
}
}, 1000);
}
function pause() {
clearInterval(intervalSeconds);
interval = undefined;
}
function reset() {
clearInterval(intervalSeconds);
document.getElementById('minutesInputField').innerHTML;
}
function stop() {
let countDivElement = document.getElementById("countdown");
countDivElement.innerHTML = 'countdown done';
countdownEnded = true;
clearInterval(intervalSeconds);
}
function updateDisplay(seconds, currentTime) {
let timeIncrement = Math.floor(currentTime / 1000);
updateTime(seconds - timeIncrement);
return timeIncrement;
}
/**
* @method - updatesecondsond
* @summary - This updates the timer every seconds
*/
function updateTime(seconds) {
let countDivElement = document.getElementById("timer");
let minutes = Math.floor(seconds / 60);
let remainingSeconds = seconds % 60;
if (remainingSeconds < 10) {
remainingSeconds = '0' + remainingSeconds;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
if (seconds > 0) {
seconds = seconds - 1;
} else {
stop();
}
countDivElement.innerHTML = minutes + ":" + remainingSeconds + ":";
};
function updateMillis() {
let countMillsElement = document.getElementById('millis');
let counterMillis = 99;
let millis = 0;
let intervalMillis = setInterval(() => {
if (counterMillis < 0) {
clearInterval(intervalMillis);
counterMillis = 99;
} else {
millis = counterMillis < 10 ? counterMillis + '0' : counterMillis;
};
countMillsElement.innerHTML = millis;
counterMillis--;
}, 10);
if (countdownEnded) {
stop();
clearInterval(intervalMillis);
}
};