【问题标题】:How do I change a value only when a key is pressed down?如何仅在按下键时更改值?
【发布时间】:2014-12-09 21:18:50
【问题描述】:

我试图编写一个代码,其中一个球只有在我按下箭头键时才会移动,当我松开时它会停止,但它会继续移动。我该如何解决这个问题?

这是我写的部分代码:

document.onkeydown = function tast (e) {
    if (e.keyCode == 39) {  // høyre
        høyre = 1;  
    } else {
        høyre = 0;
        console.log("ikke høyre")
    }
    if (e.keyCode == 37) {  // venstre
        venstre = 1;  
    } else {
        venstre = 0;
    }
    if (e.keyCode == 38) {  // opp 
        opp = 1; 
    } else {
        opp = 0;
    }
    if (e.keyCode == 40) {  // ned
        ned = 1;              
    } else {
        ned = 0;
    }
}

if (venstre == 1){
    kuler[0].x -= 4;
}
if (høyre == 1){
    kuler[0].x += 4;;
}
if (opp == 1){
    kuler[0].y -= 4;
}
if (ned == 1){
    kuler[0].y += 4;
}

【问题讨论】:

  • 好像忘记考虑onkeyup了。
  • 我只希望它在按键按下时移动
  • 设置它在按键按下时移动。并让它在钥匙向上时停止移动......我认为下面的答案就是一个很好的例子。

标签: javascript for-loop while-loop keypress


【解决方案1】:

然后在else 上将您的值设置为0。使用onkeyup 事件处理程序。然后对于onkeypress,将您的值设置为1。并将onkeyup 设置为0

document.onkeydown = function tast (e) {
    if (e.keyCode == 39) høyre = 1;  
    if (e.keyCode == 37) venstre = 1;  
    if (e.keyCode == 38) opp = 1; 
    if (e.keyCode == 40) ned = 1;              
}

document.onkeyup = function tast2 (e) {
    if (e.keyCode == 39) høyre = 0;  
    if (e.keyCode == 37) venstre = 0;  
    if (e.keyCode == 38) opp = 0; 
    if (e.keyCode == 40) ned = 0;              
}

【讨论】:

  • Keyup 应该只是将所有变量设置为 0。
  • @Barmar 您一次可以按多个键。例如,我可以同时按住 leftup,当我松开 up 并按住 left 时,我应该不要停下来,而是往走。这就是为什么您不想将它们全部设置为 0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2021-11-25
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多