Остановка секундомера по достижению значения
Есть секундомер
var minutesLabel = document.getElementById("minutes");
var secondsLabel = document.getElementById("seconds");
var totalSeconds = 0;
setInterval(setTime, 1000);
function setTime() {
++totalSeconds;
secondsLabel.innerHTML = pad(totalSeconds % 99);
minutesLabel.innerHTML = pad(parseInt(totalSeconds / 99));
}
function pad(val) {
var valString = val + "";
if (valString.length < 2) {
return "0" + valString;
} else {
return valString;
}
}
<label id="minutes">00</label> метров <label id="seconds">00</label> сантиметров <div id="info">Информация</div> Нужно что бы секундомер бым в метра и сантиметрах, по достижению 20 метро и 00 сантиметров, показывался блок "div id="info" , а сам секундомер останавливался и больше не запускался (запись в куки я так понял) Гугл шерстил хорошо, и подобных решений не нашел |
Я установил что 1 минута (метр) считаеться после достижения 99 секунд (сантиметры)
|
neowaring, метр — это единица для измерения расстояния, а секунда — для измерения времени. Поскольку вы хотите измерять время, то вам нужно использовать секунды для своих измерении!
Для измерения бо́льших интервалов времени используется, например — минута, которая составляет 60 секунд. Если вы заинтересованы в измерении времени по 100 секунд, то вы можете использовать гектосекунду, которая составляет 100 секунд. Вот ваш пример...
<label id="minutes">00</label> <abbr title="гектосекунда">гс</abbr>
<label id="seconds">00</label> <abbr title="секунда">с</abbr>
<div id="info" hidden>Информация</div>
<style> html {font: 250% serif;} abbr {cursor: help;}</style>
<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js"></script>
<script>
const isLapsed = "isLapsed" in localStorage;
const minutesLabel = document.getElementById("minutes");
const secondsLabel = document.getElementById("seconds");
const infoElement = document.getElementById("info");
if(isLapsed) {
infoElement.hidden = false;
} else {
const startTime = Date.now();
(function loop() {
const passedSeconds = 0.001 * (Date.now() - startTime);
secondsLabel.innerHTML = parseInt(passedSeconds % 100).toString().padStart(2, "0");
minutesLabel.innerHTML = parseInt(passedSeconds / 100).toString().padStart(2, "0");
if(passedSeconds >= 2000) {
infoElement.hidden = false;
localStorage.isLapsed = true;
} else {
setTimeout(loop, 500);
}
})();
}
</script>
Запомните...
|
Цитата:
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<label id="minutes">00</label> <abbr title="гектосекунда">гс</abbr>
<label id="seconds">00</label> <abbr title="секунда">с</abbr>
<div id="info" hidden>Информация</div>
<style> html {font: 250% serif;} abbr {cursor: help;}</style>
<script>
const isLapsed = "isLapsed" in localStorage;
const minutesLabel = document.getElementById("minutes");
const secondsLabel = document.getElementById("seconds");
const infoElement = document.getElementById("info");
if(isLapsed) {
infoElement.hidden = false;
} else {
const startTime = Date.now();
(function loop() {
const passedSeconds = 0.001 * (Date.now() - startTime);
secondsLabel.innerHTML = parseInt(passedSeconds % 100).toString().padStart(2, "0");
minutesLabel.innerHTML = parseInt(passedSeconds / 100).toString().padStart(2, "0");
if(passedSeconds >= 2000) {
infoElement.hidden = false;
localStorage.isLapsed = true;
} else {
setTimeout(loop, 500);
}
})();
}
</script>
</body>
</html>
|
Цитата:
Возможно вы используете старый браузер, и вам нужно добавить костыли (polyfill) для эмуляции недостающих методов! Добавил в пример выше! Цитата:
|
Цитата:
Вот результат который я пытаюсь получить. Отсчет сантиметров и метров в шапке сайта |
| Часовой пояс GMT +3, время: 12:14. |