计算在JavaScript中同时按下的键数

时间:2014-07-24 09:56:55

标签: javascript jquery

是否可以计算同时按下的键数?我走得很远,但是当我离开浏览器窗口时,我会遇到一些不必要的行为。如果我在远离浏览器窗口时按住x键,然后在另一个窗口中释放键,则当我回到浏览器窗口时,numKeys数组保持不变。也许你可以检查返回浏览器窗口时按下了多少键?

到目前为止我的代码:

var numKeys = [];

$(document).keydown(function(e){
    if(numKeys.indexOf(e.keyCode) == -1){
        numKeys.push(e.keyCode);
    }
    document.getElementById('test').innerHTML = numKeys.length;
});

$(document).keyup(function(e){
    if(numKeys.indexOf(e.keyCode) > -1){
        var index = numKeys.indexOf(e.keyCode);
        if(index > -1){ numKeys.splice(index, 1); }
    }
    document.getElementById('test').innerHTML = numKeys.length;
});

4 个答案:

答案 0 :(得分:3)

试试这个(更新):

var cpt = 0;
var codes = "";
$(function () {
    $(document).keydown(function (e) {
        if (codes.indexOf(";" + e.keyCode + ";") == -1) {
            cpt++;
            codes += ";" + e.keyCode + ";";
        }
    });
    $(document).keyup(function (e) {
        var tmp = ";" + e.keyCode + ";";
        if (codes.indexOf(tmp) != -1) {
            cpt--;
            var part1 = codes.substring(0,codes.indexOf(tmp));
            var part2 = codes.substring(codes.indexOf(tmp)+tmp.length );
            codes=part1+part2;
        }
    });
});

新的工作;)链接: FIDDLE

答案 1 :(得分:2)

解决问题的一个简单方法是清除用户离开标签时按下的键。您可以像这样使用window.onblur事件:

window.onblur = function () {
    numKeys = [];
};

Demo

请注意,此解决方案无法识别您在其他窗口中按下的键。 (例如,在另一个窗口中按“向上”,然后再次选择此窗口)

答案 2 :(得分:0)

让我们保持简单。想法是在keys上将对象为event.keyCode的{​​{1}}设置为true,并在keydown上删除。然后计算keyuptrue的实例,

keys

答案 3 :(得分:0)

我决定在上面的评论中分享前几分钟提到和链接的片段。但是,为了说清楚,我发现很难通过键盘同时按下/接受超过四个,也许五个键,这就是为什么所有这些尝试都可能没用:)

window.onload = function(){

  var a = [];
  var log = document.getElementById("keys");

  document.body.onkeydown = function(event){
    var keyCode = ('which' in event) ? event.which : event.keyCode;
    if(a.indexOf(keyCode) == -1) a.push(keyCode);
    log.innerHTML = a.length + " | " + a.join();
    return false;
  };  

  document.body.onkeyup = function(event){
    a = [];
    log.innerHTML = a.join();
  };

};

工作jsBin