Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   При обновлении что бы не обнулялся таймер (https://javascript.ru/forum/misc/78104-pri-obnovlenii-chto-ne-obnulyalsya-tajjmer.html)

neowaring 27.07.2019 10:11

При обновлении что бы не обнулялся таймер
 
Как сделать что бы при обновлении страницы, таймер не обнулялся а продолжал считать от значения которое насчитал на предыдущей странице ?
<script>
	const isLapsed1 = "isLapsed1" in localStorage;
	const minutesLabel = document.getElementById("minutes");
	const secondsLabel = document.getElementById("seconds");
	const infoElement  = document.getElementById("info");
	const info1Element  = document.getElementById("pervii16");

	if(isLapsed1) {
		infoElement.hidden = false;
	} else {
		const startTime = Date.now();
		
		(function loop() {

			const passedSeconds = 0.001 * (Date.now() - startTime);
			secondsLabel.innerHTML = parseInt(passedSeconds % 100).toString().padStart(1, "0");
			minutesLabel.innerHTML = parseInt(passedSeconds / 100).toString().padStart(1, "0");
			
			if(passedSeconds >= 2000) {
				infoElement.hidden = false;
				info1Element.hidden = true;
				localStorage.isLapsed1 = true;
			} else {
				infoElement.hidden = true;
				info1Element.hidden = false;
				setTimeout(loop, 500);
			}
		})();
	}
</script>

Malleys 27.07.2019 17:46

Вам нужно запомнить время начала! Поменял 11 и 12 строчки!

<script>
	const isLapsed1 = "isLapsed1" in localStorage;
	const minutesLabel = document.getElementById("minutes");
	const secondsLabel = document.getElementById("seconds");
	const infoElement  = document.getElementById("info");
	const info1Element  = document.getElementById("pervii16");

	if(isLapsed1) {
		infoElement.hidden = false;
	} else {
		const startTime = "startTime" in localStorage ? Number(localStorage.startTime) : Date.now();
		localStorage.startTime = startTime;
		
		(function loop() {
			const passedSeconds = 0.001 * (Date.now() - startTime);
			secondsLabel.innerHTML = parseInt(passedSeconds % 100).toString().padStart(1, "0");
			minutesLabel.innerHTML = parseInt(passedSeconds / 100).toString().padStart(1, "0");
			
			if(passedSeconds >= 2000) {
				infoElement.hidden = false;
				info1Element.hidden = true;
				localStorage.isLapsed1 = true;
			} else {
				infoElement.hidden = true;
				info1Element.hidden = false;
				setTimeout(loop, 500);
			}
		})();
	}
</script>


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