JQuery - 多键按下检测

时间:2013-06-27 19:45:55

标签: javascript jquery arrays keypress

我遇到多键按压检测的问题。我是js / JQuery的新手,所以它可能是一些愚蠢的错误..但我找不到它。任何帮助,将不胜感激。

    //========== KEY LOGGING ==========
  var pressedKeys = [];      
// == KEYDOWN ==
$(document.body).keydown(function(e){
    pressedKeys[e.which] = true;
        //left    
    if(pressedKeys[37] = true)
        {
        x -= speed;
        }         
        //up    
    if(pressedKeys[38] = true)
        {
        y -= speed;
        }         
        //right    
    if(pressedKeys[39] = true)
        {
        x += speed;
        }          
        //down    
    if(pressedKeys[40] = true)
        {
        y += speed;
        }          
        //+    
    if(pressedKeys[107] = true)
        {
        speed += 1;
        }           
        //-
    if(pressedKeys[109] = true)
        {
        speed -= 1;
        } 
});

// == KEYUP ==    
$(document.body).keyup(function (e) {
     pressedKeys[e.which] = false;   
});

编辑:问题是,当按下任何键时,它会激活所有方向..我不知道为什么。

2 个答案:

答案 0 :(得分:0)

将您的if语句从if (this = that)更改为if (this == that)。 “=”符号实际上将变量设置为true,即使在if语句中也是如此。只有“==”检查它是否评估为真。

答案 1 :(得分:0)

我在这里看到的一些事情:

您正在使用赋值运算符而不是相等运算符:)

所发生的事情是

if (x = true) { /* code always runs */ }; 

尝试

if (pressedKeys[i] === true) { };

===可以说比==更好,因为它不会进行任何自动投射。我相信1 == true将返回true但是1 === true将返回false

第二件事是你确定加载了jquery吗?也许围绕$(document).ready()包装整个事物。请参阅下面的快速示例:

  //========== KEY LOGGING ==========
var pressedKeys = [];      
// == KEYDOWN ==

$(document).ready(function(event) {

    $(document.body).keydown(function(e){
        pressedKeys[e.which] = true;
            //left    
        if(pressedKeys[37] === true)
            {
            x -= speed;
            }         
            //up    
        if(pressedKeys[38] === true)
            {
            y -= speed;
            }         
            //right    
        if(pressedKeys[39] === true)
            {
            x += speed;
            }          
            //down    
        if(pressedKeys[40] === true)
            {
            y += speed;
            }          
            //+    
        if(pressedKeys[107] === true)
            {
            speed += 1;
            }           
            //-
        if(pressedKeys[109] === true)
            {
            speed -= 1;
            } 

        alert(speed);
    });

// == KEYUP ==    
    $(document.body).keyup(function (e) {
         pressedKeys[e.which] = false;   
    });
});

最后,如果x和y确实没有定义,或者如果速度未定义但没有更多代码,我仍然会遇到错误,我无法确定你会遇到什么错误。

好的希望这有帮助。

您可能还想查看IIFE,这样就不会将这些x和y以及速度变量保留为全局