我知道如何捕捉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