2017-09-01 3 views
2

Ich möchte eine ganze Zahl erhöhen, indem Sie die rechte Pfeiltaste. Die Funktion, die ich gemacht habe, funktioniert, aber es kehrt zu schnell zurück.Gibt es eine Möglichkeit zu machen „onkeydown“ Rückkehr langsamer

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; 
       } 
      } 

Der Code oben ist, wo ich jetzt bin. Ich verwende localStorage, um die gespeicherte Ganzzahl zu prüfen, und inkrementiere, wenn sie übereinstimmt. Sobald die ganze Zahl bis 9 bekommt, subtrahiert es wieder auf 0

kann jeder sehen, was mache ich falsch oder nicht richtig zu tun?

+0

setTimeout (function() {// Code, den Sie verzögern wollen, geht hier hin}, 500); –

+0

hmmm, habe ich ein Timeout früher verwendet, aber nur 100, nicht 500 Ich werde – MrEhawk82

+0

versuchen jetzt empfehle ich [Lodash des '_.throttle'] (https://lodash.com/docs/4.17.4# Drosselung), um zu vermeiden, die Räder neu erfinden – no1xsyzy

Antwort

1

Wenn Sie nicht wollen, dass es too fast dann auszuführen, halten es in einem 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; 
    } 
    } 
} 
+0

das tat es, und danke für diese Antwort, ich wusste nicht, dass ich die Zeitüberschreitung mit Booleans auf diese Weise verwenden konnte. Du hast mich heute gelernt. – MrEhawk82

2

platzieren können Sie auch manuell Überblick über die Zeit halten einen Verschluss mit:

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(); 
     } 
    } 
})(); 
Verwandte Themen