11

Javascript では、現在押されているすべてのキーのリストを返す関数を作成したいと考えています (ユーザーがカスタム キーボード ショートカットを作成できるようにするため)。Javascript で現在押されているすべてのキーのリストを取得する方法はありますか? ?

4

2 に答える 2

8
  • キーが押されるたびにkeydownイベントが送信されます
  • キーが離されるたびに、keyupイベントがトリガーされます

したがって、キーを配列に保存し、組み合わせが真かどうかを確認するだけです。

var keys = [];
window.addEventListener("keydown",
    function(e){
        keys[e.keyCode] = true;
        checkCombinations(e);
    },
false);

window.addEventListener('keyup',
    function(e){
        keys[e.keyCode] = false;
    },
false);

function checkCombinations(e){
    if(keys["a".charCodeAt(0)] && e.ctrlKey){
        alert("You're not allowed to mark all content!");
        e.preventDefault();
    }
}

可能な限りe.key代わりに使用する必要があることに注意してください(この場合、は文字列であるため)。e.keyCodevar key = {}e.key

于 2012-11-30T06:24:55.633 に答える
7

前の回答を改善して、キーダウンとキーアップで押されたキーのリストを出力するデモを作成しました。

ここでは jsfiddle にあります。

var keys = [];
document.body.innerHTML = "Keys currently pressed: "
window.addEventListener("keydown",
    function(e){
        keys[e.keyCode] = e.keyCode;
        var keysArray = getNumberArray(keys);
        document.body.innerHTML = "Keys currently pressed:" + keysArray;
        if(keysArray.toString() == "17,65"){
            document.body.innerHTML += " Select all!"
        }
    },
false);

window.addEventListener('keyup',
    function(e){
        keys[e.keyCode] = false;
        document.body.innerHTML = "Keys currently pressed: " + getNumberArray(keys);
    },
false);

function getNumberArray(arr){
    var newArr = new Array();
    for(var i = 0; i < arr.length; i++){
        if(typeof arr[i] == "number"){
            newArr[newArr.length] = arr[i];
        }
    }
    return newArr;
}
​
于 2012-11-30T18:31:34.273 に答える