Как я могу остановить обратный отсчет, пока не истечет localStorage? - PullRequest
0 голосов
/ 26 мая 2019

Следующий скрипт выполняет обратный отсчет, пока не достигнет установленного числа (в данном случае 76), после чего снова начинает обратный отсчет и так далее. При обновлении страницы обратный отсчет не сбрасывается, пока не истечет localStorage.

Я хочу, чтобы, когда обратный отсчет достиг 76, он остановился и больше не начинал считать. Это до истечения срока действия localStorage. Пожалуйста, как я могу это сделать?

<div id="divCounter"></div>
var min = 80;
var max = 85;
var random = Math.floor(Math.random() * (+max - +min)) + +min;

if (localStorage.getItem("counter")) {
  if (localStorage.getItem("counter") >= 1000000000) { // Duration of localStorage
    var value = random;
  } else {
    var value = localStorage.getItem("counter");
  }
} else {
  var value = random;
}

document.getElementById('divCounter').innerHTML = value;

var counter = function () {
  if (value <= 76) { // End count down. <= or >=
    localStorage.setItem("counter", random);
    value = random;
  } else {
    value = parseInt(value) - 1; // + 1 or - 1
    localStorage.setItem("counter", value);
  }

  document.getElementById('divCounter').innerHTML = value;
};

var interval = setInterval(function () {
  counter();
}, 1000); // speed count

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Это мое лучшее предположение по вашему желанию:

// If there's a count in localStorage but it is expired then
//      set value to a random between 80 and 85
// else
//      set value to the count in localStorage

// Display the count in a div and decrease it by 1 every second. 
// If the count falls below 76 then 
//      stop counting down and
//      reset the localStorage counter to the random value

        const min = 80;
        const max = 85;
        const stopValue = 76;
        const duration = 1000000000;
        const rnd = Math.floor(Math.random() * (max - min)) + min;

        const counter = () => {
            const lsCounter = localStorage.getItem('counter');

            let retval;

            if(lsCounter && lsCounter <= duration){
                retval = lsCounter - 1;
                if(lsCounter <= stopValue){
                    clearInterval(interval);
                    retval = rnd;
                }
            }else{
                retval = rnd;
            }
            localStorage.setItem('counter', retval);
            document.getElementById('divCounter').innerHTML = retval;
        }
        let interval = setInterval(function () {
            counter();
        }, 1000); 

Это правильно?

0 голосов
/ 26 мая 2019

Есть много проблем с этим кодом, но, учитывая, как он здесь, вам нужно вызвать clearInterval (интервал), когда значение <= 76, чтобы остановить изменение локального хранилища в этой точке. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...