如何禁用onkeyup几秒钟

时间:2019-01-12 12:31:41

标签: javascript php

我创建了一个浏览器游戏,并且我添加了按键绑定,以便玩家可以使用按键在世界各地移动。 如果人们使用按钮移动,这些按钮将隐藏5秒钟,以使动画结束。现在,我也想对键盘进行此操作。 例如:播放器按下空格键,间隔将持续5秒。再按一次空格将在两次相同的间隔运行时产生严重干扰。那么,如何在调用函数后5秒钟将其禁用,以使其不会出现故障?

这是我用于按键的代码:

<script>
            document.body.onkeyup = function(e){
                if(e.keyCode == 32){
                    var cmd = "<?php echo $row['HEADING']; ?>";
                    if(cmd == "N") myMoveUp();
                    if(cmd == "E") myMoveRight();
                    if(cmd == "S") myMoveDown();
                    if(cmd == "W") myMoveLeft();
                }
                if(e.keyCode == 37){
                    ChangeHeadingKP("W");  
                }
                if(e.keyCode == 38){
                    ChangeHeadingKP("N");  
                }
                if(e.keyCode == 39){
                    ChangeHeadingKP("E");  
                }
                if(e.keyCode == 40){
                    ChangeHeadingKP("S");  
                }
            }
            </script>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我不会依赖时间(例如5秒),因为当您更改它们时,您将必须检查代码。

相反,我依赖于通过调用特定方法来切换标志,例如:

// global javascript variable
var flag =  true;

function myFunction() {
  var imgName = "";
  var zIndexVal = 0;
  if (flag) {
     imgName = "queen.png";
     zIndexVal = -1;
  } else {
     imgName = "queen2.png";
     zIndexVal = 0;
  }
  flag = !flag;
  var index = document.getElementById('concier').style.zIndex = zIndexVal;
  var foto = document.getElementById('foto').src = imgName;

  return index + foto;  
}

这两个函数与keymanager.suspend(); // play animation, cutscene or whatever keymanager.resume(); 一样易于定义,如下所示:

keymanager

剩下的就是当按键被停用时按键事件处理程序将失效:

var keymanager = {
  "active": true,
  "suspend": () => {
    keymanager.active = false;
  },
  "resume": () => {
    keymanager.active = true;
  }
};