@nagge101

Почему некорректно отрабатывает счетчик на js?

Есть счетчик дней, часов и минут.
Суть следующая: создается куки и выводится значение в html код.
Проблема в том, что когда счетчик доходит до 0 надпись того, что отсчет закончен выводится, но потом выводится следующее "-1 день 24 часа 00 минут" и счетчик идет так же вниз.

Вот сам код:
<script type="text/javascript">
        offset = 60 * 60 * 0.03;
        id = 'time';
        function update() {
            u = parseInt(new Date().getTime()/1000);
            time = getCookie('time');
            if(!time) {
                time = u + offset; setCookie('time', time);
            }
            today = u;
            day = (today - time) / 86400 * -1;
            days = Math.floor(day);
            clock = Math.floor((day - days) * 24);
            min = Math.floor((((day - days) * 24) - clock) * 60);
            console.log(days);
            console.log(clock);
            console.log(min);
            if(days <= 0 && clock <= 0 && min <= 0) {
                document.getElementById('header-get_precent').innerHTML = '0 дней 0 часов 0 минут конец'; 
            } else {
                document.getElementById('header-get_precent').innerHTML = days + ' дней ' + clock + ' часов ' + min + ' минут'; 
            }
        }
        setTimeout(update, 500);
        function getCookie(name) {
          var matches = document.cookie.match(new RegExp(
            "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
          ));
          return matches ? decodeURIComponent(matches[1]) : undefined;
        }
        function setCookie(name, value, options) {
          options = options || {};
          var expires = options.expires;
          if (typeof expires == "number" && expires) {
            var d = new Date();
            d.setTime(d.getTime() + expires * 1000);
            expires = options.expires = d;
          }
          if (expires && expires.toUTCString) {
            options.expires = expires.toUTCString();
          }
          value = encodeURIComponent(value);
          var updatedCookie = name + "=" + value;
          for (var propName in options) {
            updatedCookie += "; " + propName;
            var propValue = options[propName];
            if (propValue !== true) {
              updatedCookie += "=" + propValue;
            }
          }
          document.cookie = updatedCookie;
        }
    </script>


console.log вывожу в консоль значение каждой цифры. Цифра дня со знаком -, а остальные +. Как сделать так, чтобы все работало и отображалось корректно?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Почитать, что такое setInterval и setTimeout и переписать нормально. https://learn.javascript.ru/settimeout-setinterval
Сейчас функция update у вас вызывается только один раз, а должна выполняться через каждый промежуток.
Есть два варианта решения:
1) Использовать setInterval и сохранять в переменную intervalId, а в update проверять значение и, когда нужно, выполнять clearInterval
2) При каждом вызове update проверять время и, в случае, если оно не достигло критической точки, вызывать update с задержкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы