繁体   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