区分按键和按键

Tom*_*Tom 5 javascript jquery keystroke

我有一个javascript函数,在按下'down'键时运行.我想,如果按下"向下"键,该功能根本不会运行.

我想到了keydown和keyup之间的时间,如果时间小于1秒,那么函数将在keyup上运行.问题是,如果我按住键,浏览器会将其视为连续多次按下的键.

有一个更好的方法吗?

谢谢

小智 10

有一个称为repeat的键盘事件属性,如果按键被按下,则返回true。

document.addEventListener('keydown', (event) => {
  if(event.repeat) {
    // key is being held down
  } else {
    // key is being pressed
  }
});
Run Code Online (Sandbox Code Playgroud)


Mat*_*hew 1

如果我理解你的问题是你的浏览器将一个按键解释为多个按键事件。您希望按住某个键与仅按下该键时会发生不同的情况;并且您希望这种差异基于您认为应该构成“持有”密钥的某个时间。因此,您需要通过跟踪按键事件来区分按住和按下。下面的伪代码将解决这个问题:

按键时:

if !yourBool 
    start timer

yourBool = true 
Run Code Online (Sandbox Code Playgroud)

在键盘上:

if timer < yourTime
    do something

yourBool = false
Run Code Online (Sandbox Code Playgroud)

这将起作用,因为除非发生 keyup 事件,否则计时器不会重新启动。

现在...如果您的浏览器将按键解释为:
Keydown、Keyup、Keydown、Keyup...
那么您的这种方法就会出现问题。