Я нашел этот таймер: https://css-tricks.com/how-to-create-an-animated-countdown-timer-with-html-css-and-javascript/. Я использовал это на своем сайте. Однако, когда я обновляю sh мою страницу, она возвращается со своим начальным временем, тогда как я хочу, чтобы она сохранила в памяти оставшееся время для меня и даже для каждого пользователя сайта. Я хочу создать глобальный таймер!
Я пытался поместить значение таймера в базу данных с помощью SQL, но, похоже, я не могу уменьшить это значение в моей базе данных с помощью php для отображения это после.
РЕДАКТИРОВАТЬ:
Я уже пробовал localstorage, но если я хорошо помню, это не характерно для всех пользователей.
Мой код для уменьшения на php:
<?php
while($gameActive){
$updateRequest = $bdd->execute("UPDATE `TimeLeft` SET Time= Time-1");
sleep(1000)
}
?>
//Timer js code
Если отображается таймер, он уменьшается один, поэтому я хочу уменьшить его значение в моей базе данных, чтобы $ gameActive = $ true. $ bdd - это моя база данных. У TimeLeft есть только одна запись
Когда я кодирую это l oop в php, мой таймер перестает отображаться.
<script>
//Timer js code
const TIME_LIMIT = 60;
let timePassed = 0;
let timeLeft = TIME_LIMIT;
let timerInterval = null;
let remainingPathColor = COLOR_CODES.info.color;
document.getElementById("app").innerHTML = `
<div class="base-timer">
<svg class="base-timer__svg" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<g class="base-timer__circle">
<circle class="base-timer__path-elapsed" cx="50" cy="50" r="45"></circle>
<path
id="base-timer-path-remaining"
stroke-dasharray="283"
class="base-timer__path-remaining ${remainingPathColor}"
d="
M 50, 50
m -45, 0
a 45,45 0 1,0 90,0
a 45,45 0 1,0 -90,0
"
></path>
</g>
</svg>
<span id="base-timer-label" class="base-timer__label">${formatTime(
timeLeft
)}</span>
</div>
`;
startTimer();
function onTimesUp() {
clearInterval(timerInterval);
}
function startTimer() {
timerInterval = setInterval(() => {
timePassed = timePassed += 1;
timeLeft = TIME_LIMIT - timePassed;
document.getElementById("base-timer-label").innerHTML = formatTime(
timeLeft
);
setCircleDasharray();
setRemainingPathColor(timeLeft);
if (timeLeft === 0) {
onTimesUp();
nuit();
}
}, 1000);
}
function formatTime(time) {
const minutes = Math.floor(time / 60);
let seconds = time % 60;
if (seconds < 10) {
seconds = `0${seconds}`;
}
return `${minutes}:${seconds}`;
}
function setRemainingPathColor(timeLeft) {
const { alert, warning, info } = COLOR_CODES;
if (timeLeft <= alert.threshold) {
document
.getElementById("base-timer-path-remaining")
.classList.remove(warning.color);
document
.getElementById("base-timer-path-remaining")
.classList.add(alert.color);
} else if (timeLeft <= warning.threshold) {
document
.getElementById("base-timer-path-remaining")
.classList.remove(info.color);
document
.getElementById("base-timer-path-remaining")
.classList.add(warning.color);
}
}
function calculateTimeFraction() {
const rawTimeFraction = timeLeft / TIME_LIMIT;
return rawTimeFraction - (1 / TIME_LIMIT) * (1 - rawTimeFraction);
}
function setCircleDasharray() {
const circleDasharray = `${(
calculateTimeFraction() * FULL_DASH_ARRAY
).toFixed(0)} 283`;
document
.getElementById("base-timer-path-remaining")
.setAttribute("stroke-dasharray", circleDasharray);
}
function nuit() {
ActionRole();
DateNow=new Date();
timePassed = DateNow;
timePassed = 0;
timeLeft = TIME_LIMIT;
timerInterval = null;
remainingPathColor = COLOR_CODES.info.color;
startTimer();
}
</script>
Я действительно мотивирован, пожалуйста, помогите мне: D