按住按钮时,动作仅发生一次

时间:2019-12-20 19:54:26

标签: javascript

我知道还有很多其他人问过相同或相似的问题,但是他们得到的答案并没有真正帮助我,因为他们非常复杂,我不甚了解,无法将其添加到我自己的代码。我一直在凝视着它,试图理解一下:Javascript on key press trigger only once真不走运。

我想让我的代码做什么:

  • 无论我按住还是按下按钮,都只做一次动作
  • 在按下按键时执行操作,在按下按键时执行另一操作
  • 能够同时按下多个键

我用混合了true false类型变量的方法尝试过:

var map = []; // creation of set
var canKEY  = true;
var a = 0;
onkeydown = onkeyup = function(e){ //creation of function
e = e || event; // to deal with IE
map[e.keyCode] = e.type == 'keydown';
/* insert conditional here */

document.getElementById("map").innerHTML = map;
document.getElementById("canKEy").innerHTML = canKEY;

if ((canKEY == true) && map[87] && map[69]){
    document.getElementById('document').innerHTML = "forwards up";
    canKEY = false;   
    }

else if ((canKEY == true) && map[87] && map[81]){
    document.getElementById('document').innerHTML = "forwards down";
    canKEY = false;
    }  

else if ((canKEY == true) && map[87]){
     document.getElementById('document').innerHTML = "forwards";                  
     canKEY = false;
     }

else{
     document.getElementById('document').innerHTML = "empty";
     canKEY = true;
     }
}
</script>

你明白了,与qe的其他浪费一样 我可以输入一个命令,但是可以使KEY保持为假,并且我无法再输入任何命令/

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我认为,有两种方法可以解决此问题:

  1. 使用mousetrap库,它可以按需完成。
      

    Mousetrap是一个简单的库,用于处理Javascript中的键盘快捷键

  2. 在lodash中使用throttle功能。
      

    创建一个受限制的函数,每等待一个毫秒最多只能调用一次 func 。调节功能带有 cancel 方法来取消延迟的 func 调用,以及 flush 方法来立即调用它们。提供选项以指示是否应在等待超时的前沿和/或后沿调用func。 func 会与提供给受限制功能的最后一个参数一起调用。随后对受限制的函数的调用将返回上一次 func 调用的结果。