Как исправить clearInterval (), не останавливая интервал? - PullRequest
0 голосов
/ 12 апреля 2019

Я сделал интервал, связанный с кнопкой, которая запускается только тогда, когда у вас есть определенная сумма денег и лимонад. Затем я создал оператор if, который делает так, чтобы, когда у вас кончился лимонад, интервал останавливался. Я использовал clearInterval () и по какой-то причине интервал не останавливается, а количество лимонада уходит в минус. Очевидно, что вы не можете иметь отрицательное количество чего-либо!

Я посмотрел на все другие вопросы с похожими проблемами, но они не ответили на мой вопрос. Все они имеют разные переменные, и было трудно найти ответ, относящийся к моему коду.

Вот мой код:

let autoBtnTwo = document.getElementById("autoBtnTwo");
let lemonade = 0;
let btnTwo = document.getElementById("btnTwo")

function btnTwoCost() {
  wallet.removeCash(20);
  update();
  document.getElementById("lemonade").innerHTML = lemonade += 30
}

function double() {
  if (wallet.getCash() >= 50) {
    wallet.addCash(2)
    update();

    document.getElementById("lemonade").innerHTML = lemonade -= 1;
  }
}

function autoLemonade() {
  if (wallet.getCash() >= 3000) {
    wallet.removeCash(3000);
    var myint = setInterval(double, 1000);
    autoBtnTwo.disabled = false;
    update();
  }
  if (wallet.getCash() <= 2999) {
    autoBtnTwo.disabled = true;
  }
  if (lemonade <= 0) {
    autoBtnTwo.disabled = true;
    btnTwo.disabled = true;
  }
}

function stopInterval() {
  var myint = setInterval(double, 1000);
  if (lemonade <= 0) {
    clearInterval(myint);
    stopInterval();
  }
}

function thousand() {
  wallet.addCash(1000)
  update();
  if (wallet.getCash() >= 3000) {
    autoBtnTwo.disabled = false;
  }
}

function Wallet() {
  return {
    addCash: function(val) {
      number += val;
    },
    getCash: function() {
      return number;
    },
    removeCash: function(val) {
      number -= val;
    }
  }
}

var number = 0;
const wallet = new Wallet();

var SUFFIXES = 'KMBTqQsSOND';

function update() {
  document.getElementById('number').textContent = getSuffixedNumber(wallet.getCash());
}

function getSuffixedNumber(num) {
  var power = Math.floor(Math.log10(num));
  var index = Math.floor(power / 3)
  num = num / Math.pow(10, (index * 3)); // first 3 digits of the number
  return num.toFixed(1) + (SUFFIXES[index - 1] || ''); // default to no suffix if it gets an out of bounds index
}
<button onclick="autoLemonade()" class="chocolate-bar-auto" id="autoBtnTwo" disabled>
  Hire worker: <br> -$3000<br> Sells Lemonade
</button>

<button onclick="thousand()">to get to $3000 for testing </button>
<button onclick="btnTwoCost()"> buy lemonade -$20</button>
<button onclick="double()">sell lemonade </button>
<div class="cash-div">
  Cash: <div id="number">0</div>
</div>

<div class="lemonade-div">
  Lemonade: <div id="lemonade">0</div>
</div>

Извините, если эта версия не работает. Весь код, который я использовал для предотвращения сбоев, делает код длиннее, чего уже достаточно. 4 раза нажмите кнопку $ 3000, затем кнопку «Купить лимонад», а затем кнопку «Найм работника», и вы увидите, что произойдет, когда она достигнет 0.

Интервал должен прекратить добавлять деньги и прекратить уменьшать количество лимонада, когда лимонад достигает 0, но вместо этого он продолжает идти в минус.

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