MrEhawk82
MrEhawk82

Reputation: 819

Is there a way to make "onkeydown" return slower

I want to increment an integer by holding down the right arrow key. The function i made works, but it returns too fast.

document.onkeydown = function (e) {
                e = e || window.event;
                if (e.keyCode == '39') {

                        var steps = localStorage.getItem("steps");
                        if (+steps < 9) {
                            if (+steps === +steps) {
                                localStorage.setItem("steps", +steps + +1)
                            }
                        } else {
                            localStorage.setItem("steps", +steps - +10);
                        }
                        var sss = localStorage.getItem("steps");

                        unicorn.className = "unicorn_" + sss + "";

                        return false;
                }
            }

The code above is where i'm at now. I am using localStorage to check the stored integer, and incrementing if it matches. Once the integer gets to 9, it substracts back to 0.

can anyone see what i'm doing wrong, or not doing right?

Upvotes: 2

Views: 63

Answers (2)

Alex Undefined
Alex Undefined

Reputation: 630

You can also manually keep track of the time using a closure:

document.onkeydown = (function () {

    var T0 = Date.now();

    return function (event) {
        if (Date.now() - T0 > 500) {
            console.log("doing my thing over here", Math.random());
            T0 = Date.now();
        }
    }
})();

Upvotes: 2

masterpreenz
masterpreenz

Reputation: 2290

If you don't want it to execute too fast then consider placing it in a setTimeout

var notTooFast = false;
var timeout   = 1000; // change it whatever you want to be

document.onkeydown = function (e) {
  e = e || window.event;
  if (e.keyCode == '39') {

    if (!notTooFast)
    {
      var steps = localStorage.getItem("steps");
      if (+steps < 9) {
          if (+steps === +steps) {
              localStorage.setItem("steps", +steps + +1)
          }
      } else {
          localStorage.setItem("steps", +steps - +10);
      }
      var sss = localStorage.getItem("steps");

      unicorn.className = "unicorn_" + sss + "";

      notTooFast = true;
      setTimeout(function () {
          notTooFast = false;
      }, timeout);

      return false;
    }
  }
}

Upvotes: 1

Related Questions