我知道如何捕捉keyup和keydown事件。如何查看修飾鍵是否被按下而不捕捉keydown事件?
我希望我的程序能夠查看哪些修飾鍵(例如:元鍵,控制鍵,alt鍵等)當前被按住,即使程序沒有觀察到這些鍵的按鍵事件。
我知道點擊事件和其他事件可以告訴我哪些修飾鍵被按下時,但我的程序不能等待一個發生。
我需要我的程序定期檢查修飾鍵(比如每隔100ms)。我會如何去做這件事?如果有幫助,我的程序使用jQuery。
我知道如何捕捉keyup和keydown事件。如何查看修飾鍵是否被按下而不捕捉keydown事件?
我希望我的程序能夠查看哪些修飾鍵(例如:元鍵,控制鍵,alt鍵等)當前被按住,即使程序沒有觀察到這些鍵的按鍵事件。
我知道點擊事件和其他事件可以告訴我哪些修飾鍵被按下時,但我的程序不能等待一個發生。
我需要我的程序定期檢查修飾鍵(比如每隔100ms)。我會如何去做這件事?如果有幫助,我的程序使用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
不幸的是,問題是我的程序不能從你的第一行做出假設。它不知道修飾鍵是否最初被按下。 – Sophtware
@Sophtware程序沒有這樣的假設,它只是在未按下按鍵的情況下開始。除非您的用戶在按住修飾鍵的同時加載頁面,否則這應該起作用 – DelightedD0D
@Sophtware嗯,我認爲沒有其他辦法。模擬事件似乎並不知道是否按下了熱鍵。 –
,除非你使用一個事件監聽器無法做到的。 –
你的意思是我需要一個實際的事件(而不是一個模擬的)才能被解僱,以便知道哪些修飾鍵被按下了? – Sophtware
如果下面的答案是不可接受的,我會說你很可能有X Y的問題。不要告訴我們你想要做什麼*,而要解釋你實際上試圖解決的問題。也就是說,你爲什麼想要這樣做?可能有更好的方法。 – DelightedD0D