Как сделать счетчик, который добавляет определенное число c в секунду, используя javascript? - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть следующий код, который должен добавлять 2,6 каждую секунду. Но после первого добавления я получаю 8. Как я могу это исправить? На тестере здесь это работает, но на моей странице я получаю 8 https://260044-5.web1.fh-htwchur.ch/

Заранее спасибо.

setTimeout(start, 0000);
var i = 2.6;
var num = document.getElementById('humans');

function start() {
  setInterval(increase, 1000);
}

function increase() {
    if (i < 100000000) {
      i += 2.6;
      num.innerText = Math.round(i);
    }
}
<div id="humans">2.6</div>
<p>Menschen wurden geboren.</p>

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

Код здесь работает, но в ссылке, которую вы разместили, у вас есть это в вашем скрипте:

//funtion for humans born

setTimeout(start, 0000);
var i = 2.6;
var num = document.getElementById('humans');

function start() {
  setInterval(increase, 1000);
}

function increase() {
    if (i < 100000000) {
      i += 2.6;
      num.innerText = Math.round(i);
    }
}

//funtion for trees cut

setTimeout(start, 0000);
var t = 475.646879756;
var t = document.getElementById('trees');

function startTwo() {
  setInterval(increase, 1000);
}

Вы выполняете start дважды: один за "рожденными людьми", а другой после "вырубки деревьев".

Поэтому у вас есть два параллельных интервала, которые выполняются increase дважды в секунду, и каждый из вызовов increase манипулирует одними и теми же переменными. Вот почему вы получили 8 сразу.

Я не уверен, какова ваша цель здесь, но у вас либо есть разные переменные / функции, которые нужно увеличивать каждую секунду для "рожденных людей" и "срубленных деревьев", или у вас есть одна start вызов (и, следовательно, одна increase функция вызывается каждую секунду).

В любом случае, это ваша ошибка: если вы хотите уточнить свою логику; Я / мы можем помочь в дальнейшем.

0 голосов
/ 12 апреля 2020

Вы можете попробовать это. Основной проблемой было ваше округление, вы в основном использовали Math.round(), но вы имеете дело с типом данных с плавающей запятой. Так что просто используйте YourNumber.toFixed(n), где n - это количество десятичных знаков, которые вы хотите показать. Вы можете проверить ниже. Я только что сделал ваш код короче и короче, но вы можете изменить округление кода, и оно должно работать ..

setTimeout((function(){
  var i = 2.6;
  return function start() {
    setInterval(()=> {
      if (i < 100000000){
        i += 2.6;
        document.getElementById('humans').innerText = i.toFixed(1);
      }
    }, 1000);
  };
})(), 0000);
<div id="humans">2.6</div>
<p>Menschen wurden geboren.</p>
0 голосов
/ 12 апреля 2020

Вы округляете значение при настройке текста:

num.innerText = Math.round(i);

Если вы хотите показать значение с точностью до десятого знака, просто используйте toFixed. Пример:

num.innerText = i.toFixed(1); /* will give you one number after the decimal point */
...