簡體   English   中英

計算在JavaScript中同時按下了多少鍵

[英]Count how many keys are pressed at the same time in JavaScript

是否可以計算同時按下多少個鍵? 我已經走得很遠了,但是在離開瀏覽器窗口時跳出了一些不需要的行為。 如果在離開瀏覽器窗口時按住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;
        }
    });
});

新的Working;)鏈接: FIDDLE

一個簡單的解決方案是清除用戶離開選項卡時按下的鍵。 您可以像這樣使用window.onblur事件:

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

演示

請注意,此解決方案將無法識別您在另一個窗口中按的鍵。 (例如,您在另一個窗口中按“向上”,然后再次選擇此窗口)

讓我們保持非常簡單。 想法是在keydown時將對象為event.keyCodekeys設置為true,在keyup將其刪除。 然后計算keystrue的實例,

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

我決定分享我的摘錄,並在幾分鍾前鏈接到上面的評論中。 但是,為了清楚起見,我發現很難同時按下/接受超過四個,也許五個鍵的鍵盤,這就是為什么所有這些嘗試都可能沒有用的原因:)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM