【问题标题】:Simulate holding down key in order to gauge system repeat rate in JavaScript模拟按住键以测量 JavaScript 中的系统重复率
【发布时间】:2015-12-09 17:08:33
【问题描述】:

我有一个毫无意义的(阅读:让女朋友开心)网页,每半秒就会产生一个在屏幕上跳跃的独角兽图像。您也可以通过按 u 来生成它们。写完这个脚本后,我发现onkeydown 事件在按住时会重复——onkeyup 事件不会,这就是我感到惊讶的原因。这个“功能”让我很喜欢,所以现在我想为移动浏览器复制它。

我们的目标是在屏幕底部创建一个<div>,按住它时会生成独角兽。显然,我可以(并且可能会)使用 setInterval() 和 33 毫秒的静态延迟来模仿 Windows's default/max keyboard repeat speed,但这有什么乐趣呢?

但出于好奇,我想知道是否有一种方法可以模拟按住一个键,触发 keypress 或 keydown 事件,就像键盘对于运行页面的任何设备一样,所以我可以模拟按住在用户“按住” div 时尽可能准确地按下键。

我可以使用 jQuery 或任何其他类似的框架。

【问题讨论】:

标签: javascript simulation dom-events keyboard-events


【解决方案1】:

如果不手动编码 setInterval,则无法在 javascript 中模拟自动重复功能。这发生在操作系统级别。

可以模拟单个键盘事件。你正在寻找element.dispatchEvent(evt);

//create your fake event
var myFakeEvent = new KeyboardEvent('keydown', []);
//send the event from the element
document.body.dispatchEvent(myFakeEvent);

显然,您想从 onkeydown 正在侦听的任何元素调用 dispatchEvent()。

更详细的阅读:

EventTarget.dispatchEvent

KeyboardEvent constructor

【讨论】:

  • 然而,除了从setInterval 分派这些事件之外,没有其他方法可以模拟“持有钥匙”
  • 哦。是的,没有。你必须间隔一段时间。被按下的键的重复触发发生在操作系统级别。
  • @cutmancometh 您能否将该评论添加到答案中以便我接受?
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 2012-03-12
  • 2011-09-20
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多