Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Остановка секундомера по достижению значения (https://javascript.ru/forum/misc/78098-ostanovka-sekundomera-po-dostizheniyu-znacheniya.html)

neowaring 25.07.2019 22:20

Остановка секундомера по достижению значения
 
Есть секундомер

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" , а сам секундомер останавливался и больше не запускался (запись в куки я так понял)

Гугл шерстил хорошо, и подобных решений не нашел

neowaring 25.07.2019 22:30

Я установил что 1 минута (метр) считаеться после достижения 99 секунд (сантиметры)

Malleys 26.07.2019 00:30

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>


Запомните...
  • 1 секунда — 1⁄60 минуты
  • 1 секунда — 1⁄100 гектосекунды

neowaring 26.07.2019 02:13

Цитата:

Сообщение от Malleys (Сообщение 510717)
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>
	
	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>


Запомните...
  • 1 секунда — 1⁄60 минуты
  • 1 секунда — 1⁄100 гектосекунды

Суть то понятна. Переместил код к себе в html. и он не работает между тегами body.

neowaring 26.07.2019 02:14

<!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>

Malleys 26.07.2019 02:19

Цитата:

Сообщение от neowaring
Переместил код к себе в html. и он не работает между тегами body.

А тут работает? Ну если нажать кнопку Посмотреть в примере выше?

Возможно вы используете старый браузер, и вам нужно добавить костыли (polyfill) для эмуляции недостающих методов! Добавил в пример выше!

Цитата:

Сообщение от Русский
Ну если мы рассматриваем время как одно из измерений нашего 4-мерного пространства, то на вполне законных основаниях можем измерять его и в метрах (1 с = 300000 км).

Вы перепутали математическое четырёхмерное пространство с физическим пространством-временем, и сделали совершенно ошибочный вывод!

neowaring 26.07.2019 10:03

Цитата:

Сообщение от Malleys (Сообщение 510726)
А тут работает? Ну если нажать кнопку Посмотреть в примере выше?

Да , тут работает. и в html файле через компюютер работает.

Вот результат который я пытаюсь получить. Отсчет сантиметров и метров в шапке сайта


Часовой пояс GMT +3, время: 11:35.