1

My Dollars Per Second Counter Isn't Working. I have the right id in document.querySelector and the calculations are right. The Dollars per Second just isn't updating It seems the function is not running properly. I don't know what to do at all. I'm not getting any errors in the console either.

Click This Image

HTML:

    <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="script.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/js-cookie@beta/dist/js.cookie.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <title>Computer Clicker</title>
  </head>
  <body onload="updateDollars()">
    <div class="counterclass">
      <h1 id="counter">0 dollars</h1>
      <h3 id="dps">0.0 dps(Dollars per Second)</h3>
    </div>
    <div class="clickme">
      <img
        id="slightlydamagedcomputer"
        onclick="clicker.dollars += clicker.clickMultiplier; var click = document.querySelector('.clickme'); click.style.animation = 'click 0.2s'; var clone = click.cloneNode(true); click.parentNode.replaceChild(clone, click);"
        src="slightlydamagedcomputer.png"
        alt="Drawing of a Smoking Computer"
        width="500"
        height="500"
      />
    </div>
    <div class="upgradesleft">
      <h1>Upgrades</h1>
      <div class="upgradeoptions">
        <button></button>
        <button></button>
        <button></button>
        <button></button>
        <button></button>
      </div>
    </div>
    <div class="genright">
      <h1>Generators</h1>
      <div class="genoptions"></div>
    </div>
  </body>
</html>

Javascript:

dollars: 0,
clickMultiplier: 1,
generators: {
  cardboardMouse: {
    amount: 0,
    cost: 10,
    dps: 0.5,
    dollarsToShow: 5,
    dollarsToUnlock: 10,
    name: "Cardboard Mouse",
    description:
      "A poorly crafted cardboard version of a mouse. Need I say more?",
  },
  cardboardKeyboard: {
    amount: 0,
    cost: 50,
    dps: 1,
    dollarsToShow: 25,
    dollarsToUnlock: 50,
    name: "Cardboard Keyboard",
    description:
      "A poorly crafted cardboard version of a keyboard. Makes a satisfying noise.",
  },
},
};

var delay = 0;

function thingClicked(thing) {
if (clicker.generators[thing].cost <= clicker.dollars) {
  clicker.dollars -= clicker.generators[thing].cost;
  clicker.generators[thing].amount++;
  clicker.generators[thing].cost += Math.round(
    clicker.generators[thing].cost * 0.15
  );
  updateGenerators();
  /*updateDollarsPerSecond();*/
}
}

function dummyFunction() {
  updateDollarsPerSecond();
}

function updateDollarsPerSecond(){
  for (i in clicker.generators) {
      dummyFunction();
      console.log((clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)")
      document.querySelector("#dps").innerHTML = (clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)";
  }
}

function updateGenerators() {
document.querySelector(".genoptions").innerHTML = "";
for (i in clicker.generators) {
  document.querySelector(
    ".genoptions"
  ).innerHTML += `<div><button onclick="thingClicked('${i}');"><h3>${clicker.generators[i].name}(${clicker.generators[i].amount})</h3><p>${clicker.generators[i].description}</p><p class="cost">$${clicker.generators[i].cost}</p><p class="dps">${clicker.generators[i].dps} dps</p></button></div>`;
}
}

function updateDollars() {
if (Cookies.get("clicker") != null && Cookies.get("clicker") != "undefined") {
  var clicker1 = JSON.parse(Cookies.get("clicker"));
  for (i in clicker.generators) {
    if (clicker1.generators[i] == null) {
      clicker1.generators[i] = clicker.generators[i];
    }
  }
  clicker = clicker1;
}

updateGenerators();

setInterval(() => {
  for (i in clicker.generators) {
    clicker.dollars +=
      (clicker.generators[i].amount * clicker.generators[i].dps) / 100;
  }
  if (clicker.dollars != 1) {
    document.getElementById("counter").innerHTML =
      String(clicker.dollars).split(".")[0] + " dollars";
  } else {
    document.getElementById("counter").innerHTML =
      String(clicker.dollars).split(".")[0] + " dollar";
  }
  delay++;
  if (delay >= 40) {
    Cookies.set("clicker", JSON.stringify(clicker), { expires: 100000 });
    delay = 0;
  }
}, 10);
}

CSS:


@keyframes click {
  50% {
    transform: scale(0.95);
  }

  100% {
    transform: scale(1);
  }
}

body {
  background-color: aquamarine;
}

h1,
#dps {
  font-family: "Joan", serif;
}

#dps {
  font-size: 15px;
}

#counter,
#dps {
  text-align: center;
  margin: 0px;
  margin-top: 21.44px;
}

#slightlydamagedcomputer {
  display: block;
  margin: auto;
}

#slightlydamagedcomputer:hover {
  cursor: pointer;
}

.upgradesleft {
  left: 0px;
}

.genright {
  right: 0px;
}

.upgradesleft,
.genright {
  position: absolute;
  top: 0px;
  height: 100%;
}

.upgradesleft h1,
.genright h1 {
  text-align: center;
}

.upgradeoptions button,
.genoptions button {
  background-color: aliceblue;
  border-style: solid;
  border-color: black;
  border-width: 1px;
  height: 100px;
  width: 400px;
  display: block;
}

.upgradeoptions button {
  border-radius: 0px 15px 15px 0px;
  /*display: none;*/
}

.genoptions button {
  border-radius: 15px 0px 0px 15px;
  /*display: none;*/
}

.upgradeoptions div,
.genoptions div {
  position: relative;
}

.cost {
  left: 0px;
  top: 0px;
  border-radius: 15px;
}

.dps {
  right: 0px;
  top: 0px;
  border-radius: 0px 0px 0px 15px;
}

.cost,
.dps {
  background-color: lightgray;
  border-style: solid;
  border-color: black;
  border-width: 1px;
  position: absolute;
  margin: 0px;
  padding: 5px;
}
  • You may wish to read [Why is requestAnimationFrame better than setInterval or setTimeout](https://stackoverflow.com/q/38709923/215552) – Heretic Monkey Jul 22 '22 at 17:07

1 Answers1

0

You are not updating the element with id dps. So you need to update it.

You need to modify your updateGenerators() function by adding the following lines:

document.querySelector("#dps").innerHTML = (clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)";

and the updateGenerators() function will be:

function updateGenerators() {
    document.querySelector(".genoptions").innerHTML = "";
    for (i in clicker.generators) {
        document.querySelector("#dps").innerHTML = (clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)";

      document.querySelector(
        ".genoptions"
      ).innerHTML += `<div><button onclick="thingClicked('${i}');"><h3>${clicker.generators[i].name}(${clicker.generators[i].amount})</h3><p>${clicker.generators[i].description}</p><p class="cost">$${clicker.generators[i].cost}</p><p class="dps">${clicker.generators[i].dps} dps</p></button></div>`;
    }
  }

Check the following modified js code:


  var clicker = {
    dollars: 0,
    clickMultiplier: 1,
    generators: {
      cardboardMouse: {
        amount: 0,
        cost: 10,
        dps: 0.5,
        dollarsToShow: 5,
        dollarsToUnlock: 10,
        name: "Cardboard Mouse",
        description: "A poorly crafted cardboard version of a mouse. Need I say more?",
      },
      cardboardKeyboard: {
        amount: 0,
        cost: 50,
        dps: 1,
        dollarsToShow: 25,
        dollarsToUnlock: 50,
        name: "Cardboard Keyboard",
        description: "A poorly crafted cardboard version of a keyboard. Makes a satisfying noise.",
      },
    },
  };
  
  var delay = 0;
  
  function thingClicked(thing) {
    if (clicker.generators[thing].cost <= clicker.dollars) {
      clicker.dollars -= clicker.generators[thing].cost;
      clicker.generators[thing].amount++;
      clicker.generators[thing].cost += Math.round(
        clicker.generators[thing].cost * 0.15
      );
      updateGenerators();
      /*updateDollarsPerSecond();*/
    }
  }
  
  function dummyFunction() {
    updateDollarsPerSecond();
  }
  
  function updateDollarsPerSecond() {
    for (i in clicker.generators) {
      dummyFunction();
      console.log((clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)")
      document.querySelector("#dps").innerHTML = (clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)";
    }
  }
  
  function updateGenerators() {
    document.querySelector(".genoptions").innerHTML = "";
    for (i in clicker.generators) {
        document.querySelector("#dps").innerHTML = (clicker.generators[i].amount * clicker.generators[i].dps).toFixed(1) + " dps(Dollars per Second)";

      document.querySelector(
        ".genoptions"
      ).innerHTML += `<div><button onclick="thingClicked('${i}');"><h3>${clicker.generators[i].name}(${clicker.generators[i].amount})</h3><p>${clicker.generators[i].description}</p><p class="cost">$${clicker.generators[i].cost}</p><p class="dps">${clicker.generators[i].dps} dps</p></button></div>`;
    }
  }
  
  function updateDollars() {
    if (Cookies.get("clicker") != null && Cookies.get("clicker") != "undefined") {
      var clicker1 = JSON.parse(Cookies.get("clicker"));
      for (i in clicker.generators) {
        if (clicker1.generators[i] == null) {
          clicker1.generators[i] = clicker.generators[i];
        }
      }
      clicker = clicker1;
    }
  
    updateGenerators();
  
    setInterval(() => {
      for (i in clicker.generators) {
        clicker.dollars +=
          (clicker.generators[i].amount * clicker.generators[i].dps) / 100;
      }
      if (clicker.dollars != 1) {
        document.getElementById("counter").innerHTML =
          String(clicker.dollars).split(".")[0] + " dollars";
      } else {
        document.getElementById("counter").innerHTML =
          String(clicker.dollars).split(".")[0] + " dollar";
      }
      delay++;
      if (delay >= 40) {
        Cookies.set("clicker", JSON.stringify(clicker), {
          expires: 100000
        });
        delay = 0;
      }
    }, 10);
  }

samnoon
  • 1,340
  • 2
  • 13
  • 23