计算JavaScript中同时按下的键数

计算JavaScript中同时按下的键数,javascript,jquery,Javascript,Jquery,可以数一数同时按下多少键吗?我已经走了很长的路,但是当我从我的浏览器窗口中切换时,我得到了一些不想要的行为。如果在远离浏览器窗口时按住x个键,然后在另一个窗口中释放这些键,则在返回浏览器窗口时,numKeys阵列保持不变。也许你可以检查返回浏览器窗口时按下了多少键 到目前为止,我的代码是: var numKeys = []; $(document).keydown(function(e){ if(numKeys.indexOf(e.keyCode) == -1){ nu

可以数一数同时按下多少键吗?我已经走了很长的路,但是当我从我的浏览器窗口中切换时,我得到了一些不想要的行为。如果在远离浏览器窗口时按住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;
});
试试这个(更新):

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;
        }
    });
});
新的工作模式;)链接:

试试这个(更新):

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;
        }
    });
});

新的工作模式;)链接:

让我们保持简单。想法是在
keydown
上将对象为
event.keyCode
键设置为true,并在
keydup
上删除。然后计算
键中
true
的实例数

var keys = [];
$(function () {
    $(document).keydown(function (event) {
        keys[event.keyCode] = true;

        var count = 0;
        for (var i = 0; i < keys.length; i++) {
            if (keys[i]) count++;
        }
        console.log(count);
    });

    $(document).keyup(function (e) {
        delete keys[e.keyCode];
    });
});
var-keys=[];
$(函数(){
$(文档).keydown(函数(事件){
keys[event.keyCode]=true;
var计数=0;
对于(变量i=0;i
让我们保持简单。想法是在
keydown
上将对象为
event.keyCode
键设置为true,并在
keydup
上删除。然后计算
键中
true
的实例数

var keys = [];
$(function () {
    $(document).keydown(function (event) {
        keys[event.keyCode] = true;

        var count = 0;
        for (var i = 0; i < keys.length; i++) {
            if (keys[i]) count++;
        }
        console.log(count);
    });

    $(document).keyup(function (e) {
        delete keys[e.keyCode];
    });
});
var-keys=[];
$(函数(){
$(文档).keydown(函数(事件){
keys[event.keyCode]=true;
var计数=0;
对于(变量i=0;i
我决定分享几分钟前在上面的评论中提到并链接的我的代码片段。但是,为了说明这一点,我发现键盘很难同时按下/接受四个或五个以上的键,这就是为什么所有这些尝试可能都是无用的:)


工作

我决定分享几分钟前在上面的评论中提到并链接的我的代码片段。但是,为了说明这一点,我发现键盘很难同时按下/接受四个或五个以上的键,这就是为什么所有这些尝试可能都是无用的:)


工作

解决问题的简单方法是在用户离开选项卡时清除按下的键。您可以像这样使用事件:

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


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

解决问题的简单方法是在用户离开选项卡时清除按下的键。您可以像这样使用事件:

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



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

但它只显示已按的数量,而不是当前的数字。如果我按A、S和D并释放D,它仍然会显示3。你的JSFIDLE与你的代码片段无关:)我的键盘发出疯狂的哔哔声+1即使我不能用四个以上的键测试它(就像我不能使用我的片段)普通键盘不支持持有超过3或4个键,如果你不得不多考虑购买一个玩家键盘,但它只告诉有多少已经被按下,而不是当前的数字。如果我按A、S和D并释放D,它仍然会显示3。你的JSFIDLE与你的代码片段无关:)我的键盘发出疯狂的哔哔声+1即使我不能用四个以上的键测试它(就像我不能使用我的片段)普通键盘不支持持有超过3或4个键,如果你不得不多考虑购买一个玩家键盘,你可以重置所有的键,如果用户在代码中像标签一样。真的没有办法知道用户在另一个窗口中做了什么,我很感谢你带来了这么多疯狂的想法;)看看这个-'因为我不确定你的目标,我发现很难同时按下几个键。。。。我希望你们能给我+1,至少因为我设法锁上了键盘,试图让你们的疯狂想法成真;))@你的回答帮助我解决了我的问题。如果你把它作为一个答案,我会接受它。@Danieltovsson把它作为一个答案添加了进来。如果用户像代码中那样弹出标签,你可以重置所有的键。真的没有办法知道用户在另一个窗口中做了什么,我很感谢你带来了这么多疯狂的想法;)看看这个-'因为我不确定你的目标,我发现很难同时按下几个键。。。。我希望你们能给我+1,至少因为我设法锁上了键盘,试图让你们的疯狂想法成真;))@你的回答帮助我解决了我的问题。“如果你把它作为一个答案,我会接受的。”丹尼尔托维森补充道