[英]Keys pressed at the same time
我可以在Javascript中知道同時按下的鍵數嗎?
如果是這樣,我怎么能有他們的keyCode
數組?
您可以收聽keydown和keyup事件。
var keys = { length: 0 };
document.onkeydown = function(e){
if(!keys[e.keyCode]) {
keys[e.keyCode] = true;
keys.length++;
}
}
document.onkeyup = function(e){
if(keys[e.keyCode]) {
keys[e.keyCode] = false;
keys.length--;
}
}
然后,所有的關鍵是true
是當前壓制的人。
感謝@Esailija的小提琴演示: http : //jsfiddle.net/maniator/Gc54D/
這應該可以解決問題。 它類似於Neal,但應該解決一些問題,包括離開窗口的bug和負數密鑰錯誤。 我還簡化了編寫代碼的消息。 我用定時系統替換了用於寫入密鑰消息數量的定時器循環,添加了用於遞減長度索引的安全機制,並添加了clearKeys以在用戶離開窗口時將所有鍵切換為向上。 代碼仍有兩個錯誤:它不會識別在打開和關閉新窗口后仍然按下的鍵(它們必須被釋放並重新推送),我無法識別超過六個鍵(我懷疑這與此代碼無關,而是計算機/瀏覽器......)。
var keys = {
length: 0
};
window.onkeydown = function(e) {
if (!keys[e.keyCode]) {
keys[e.keyCode] = true;
keys.length++;
document.body.innerHTML = "You are pressing " + keys.length + " keys at the same time.";
}
}
window.onkeyup = function(e) {
if (keys[e.keyCode]) {
keys[e.keyCode] = false;
if (keys.length) {
keys.length--;
}
document.body.innerHTML = "You are pressing " + keys.length + " keys at the same time.";
}
}
function clearKeys() {
for (n in keys) {
n = false
};
keys.length = 0;
document.body.innerHTML = "You are pressing " + 0 + " keys at the same time.";
}
document.body.innerHTML = "You are pressing 0 keys at the same time.";
window.onblur = clearKeys;
由於您需要同時按下的鍵數和一組鍵碼,我建議您使用以下功能:
var getKeys = function () {
var keys = [];
window.addEventListener("blur", blur, false);
window.addEventListener("keyup", keyup, false);
window.addEventListener("keydown", keydown, false);
return function () {
return keys.slice(0);
};
function blur() {
keys.length = 0;
}
function keyup(event) {
var index = keys.indexOf(event.keyCode);
if (index >= 0) keys.splice(index, 1);
}
function keydown(event) {
var keyCode = event.keyCode;
if (keys.indexOf(keyCode) < 0)
keys.push(keyCode);
}
}();
當你調用getKeys
,它將返回同時按下的所有鍵的數組。 您可以使用該數組的length
屬性來查找同時按下的鍵數。 由於它使用addEventListener
因此它也可以與頁面上的其他代碼協同工作。
我測試了上面的功能,即使在按住鍵的同時切換到另一個窗口時它也會返回正確的按鍵(它會從數組中刪除該鍵)。 如果您按住一個鍵並切換回來,則會識別出按下了一個鍵並將其推入陣列。 因此,我可以證明上述代碼中沒有錯誤。 至少沒有在我測試過的瀏覽器上(Opera 12.00)。
我能夠同時按下8個鍵( A
, S
, D
, F
, J
, K
, L
和;
)。 這個數字似乎特定於操作系統,因為我只能同時按下4個左手鍵和4個右手鍵。 例如,在我按下A
, S
, D
和F
,然后我按下另一只左手(讓我們說G
)然后它將無法識別最后一個鍵。 這可能是因為操作系統知道人類是如何輸入的,所以它只允許每個左右鍵有四個中斷。 我使用的操作系統是Ubuntu 12.04。
你可以在這個小提琴上看到代碼。 我使用Delta Timer而不是setInterval
來顯示每50 ms后的結果。 您可能還希望閱讀以下答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.