检查密钥是否已关闭?

2022-08-30 05:19:14

有没有办法检测某个密钥当前在 JavaScript 中是否已关闭?

我知道“keydown”事件,但这不是我需要的。按下键后的一段时间,我希望能够检测到它是否仍然被按下。

附言:最大的问题似乎是,经过一段时间后,密钥开始重复,像恶魔一样触发keydown和keyup事件。希望只有一个简单的isKeyDown(key)函数,但如果没有,那么这个问题将需要克服/解决。


答案 1

除了使用 和 侦听器来跟踪 is key 何时关闭和备份之外,实际上还有一些属性可以告诉您某些键是否关闭。keyupkeydown

window.onmousemove = function (e) {
  if (!e) e = window.event;
  if (e.shiftKey) {/*shift is down*/}
  if (e.altKey) {/*alt is down*/}
  if (e.ctrlKey) {/*ctrl is down*/}
  if (e.metaKey) {/*cmd is down*/}
}

这在所有浏览器生成的事件对象(如 、 和 中的事件对象)上都可用,因此您不必使用 mousemove。keydownkeyupkeypress

我尝试使用和查找等生成自己的事件对象,但我没有运气。document.createEvent('KeyboardEvent')document.createEvent('KeyboardEvent')e.shiftKey

我在 Mac 上使用 Chrome 17


答案 2

有没有办法检测某个密钥当前在 JavaScript 中是否已关闭?

不。唯一的可能性是监视每个和并记住。keyupkeydown

一段时间后,密钥开始重复,像恶魔一样触发keydown和keyup事件。

它不应该。你肯定会重复,在许多浏览器中,你也会重复,但如果重复,这是一个错误。keypresskeydownkeyup

不幸的是,这并不是一个完全闻所未闻的错误:在Linux,Chromium和Firefox上(当它在GTK +下运行时,它在Ubuntu等流行的发行版中)都为持有的键生成重复的键 - 按键 - 按键 - 按键序列,这不可能与真正快速敲击键的人区分开来。