簡體   English   中英

如何在不捕獲keydown事件的情況下查看修改鍵是否被按下?

[英]How to see if a modifier key is being held down without catching the keydown event?

我知道如何捕獲keyup和keydown事件。

我希望我的程序看到哪些修飾鍵(例如:元鍵,控制鍵,alt鍵等)當前被按下,即使程序沒有觀察到這些鍵的keydown事件。

我知道點擊事件和其他事件可以告訴我哪些修飾鍵在被觸發時被按下,但我的程序不能等待一個發生。

我需要我的程序定期檢查修改鍵(比方說,每100毫秒)。 我該怎么做呢? 如果有幫助,我的程序使用jQuery。

您可以將這些值存儲在變量中,並隨時檢查它們。 當然,事件監聽器必須更新該變量:

 // assume no hot key is pressed var object = { ctrlKey: false, altKey: false, shiftKey: false }; // update whenever a keydown or keyup event is fired document.addEventListener("keydown", function(e) { for(var key in object) { if(object.hasOwnProperty(key)) object[key] = e[key]; // update the object from the event e } }); document.addEventListener("keyup", function(e) { for(var key in object) { if(object.hasOwnProperty(key)) object[key] = e[key]; } }); // testing example: function check() { console.log("Checking:"); console.log("Alt key:", object.altKey); console.log("Ctrl key:", object.ctrlKey); console.log("Shift key:", object.shiftKey); } setInterval(check, 1000); // calling check every second without waiting for an event to occur 

晚會,但由於這出現在谷歌,這是一個更接近的部分解決方案。 這個SO回答

document.body.onkeydown = function(e) {
  if (e.which === 18) {
    alt_state.textContent = 'pressed';
  }
};

document.body.onkeyup = function(e) {
  if (e.which === 18) {
    alt_state.textContent = 'released';
  }
};

function detectAlt() {
  if (document.webkitHidden) return;
  window.addEventListener('mousemove', function onMove(e) {
    alt_state.textContent = e.altKey ? 'pressed' : 'released';
    window.removeEventListener('mousemove', onMove, false);
  }, false);
}

document.addEventListener('webkitvisibilitychange', detectAlt, false);
window.addEventListener('load', detectAlt, false);

本質上,設置一個mousemove事件偵聽器,它包含觸發時的修飾鍵狀態,並在第一次觸發后刪除偵聽器。 同樣,仍需要“事件”,但根據應用程序的預期用途,捕獲第一個mousemove事件可能足以檢測修飾鍵。

暫無
暫無

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

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