2017-07-16 47 views
2

我知道如何捕捉keyup和keydown事件。如何查看修飾鍵是否被按下而不捕捉keydown事件?

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

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

我需要我的程序定期檢查修飾鍵(比如每隔100ms)。我會如何去做這件事?如果有幫助,我的程序使用jQuery。

+1

,除非你使用一個事件監聽器無法做到的。 –

+1

你的意思是我需要一個實際的事件(而不是一個模擬的)才能被解僱,以便知道哪些修飾鍵被按下了? – Sophtware

+2

如果下面的答案是不可接受的,我會說你很可能有X Y的問題。不要告訴我們你想要做什麼*,而要解釋你實際上試圖解決的問題。也就是說,你爲什麼想要這樣做?可能有更好的方法。 – DelightedD0D

回答

3

您可以將這些值存儲在一個變量中,並隨時檢查它們。事件偵聽器將是必要的,當然,以更新變量:

// 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

+0

不幸的是,問題是我的程序不能從你的第一行做出假設。它不知道修飾鍵是否最初被按下。 – Sophtware

+1

@Sophtware程序沒有這樣的假設,它只是在未按下按鍵的情況下開始。除非您的用戶在按住修飾鍵的同時加載頁面,否則這應該起作用 – DelightedD0D

+0

@Sophtware嗯,我認爲沒有其他辦法。模擬事件似乎並不知道是否按下了熱鍵。 –