глобальный таймер с php и javascript - PullRequest
0 голосов
/ 11 апреля 2020

Я нашел этот таймер: 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

...