javascript - 如何在 reactjs 应用程序中检测双班按键事件?
问题描述
尽管遵循了这个stackoverflow 线程,但我无法在我的reactjs应用程序中有效地检测到双档按键事件。
我补充说,
componentDidMount() {
document.addEventListener('keydown', this.handleKeyPress);
}
componentWillUnmount(){
document.removeEventListener("keydown", this.handleKeyPress);
}
handleKeyPress = (event) => {
how to detect double shift key press, more efficiently?
}
解决方案
因为在 React 中你在同一个元素上使用点击和双击事件有一些限制,我会像这样自己做:
创建 3 个变量:一个用于计数器(按班次的频率),一个用于按键之间的经过时间。注意到 Shift 被双击的状态变量
如果触发了 Key-Event(顺便说一句:我会使用 keyup),那么您:
- 检查是否按下了 Shift 键(通过键码检查)
- (如果是)将计数器变量增加到
1
- 并将
elapsed-time
变量设置为当前时间戳。
- 并将
如果触发了额外的键事件,还要检查是否按下了 shift 键。如果yes
,请检查current-timestamp
减号elapsed-timestamp
是否在您设置的注意双键按下的时间范围内(例如 1 秒)。如果是,请将您的double-press
变量设置为 1,如果不是,请清除计数器和elapsed-time
变量。
希望这能给你一个如何处理的想法。在我在第一行发布的页面上,还有一个类似这种想法的小例子:https ://stackoverflow.com/a/40449854/1256697
推荐阅读
- javascript - next.js 上的多个配置 next.config.js
- python - 剩余金额:代码有什么问题?
- c++ - gRPC:长时间运行的流式处理的最佳实践是什么?
- javascript - 使用 Visual Studio Code 和 Node.js 调试/学习 javascript
- reactjs - 为什么在这个初学者问题中道具没有传递给我的组件
- html - 与 flex-grow 一起使用的 width 属性的影响?
- visual-studio-code - 如何从 vscode 中的一行中删除错误/警告下划线?
- angular - 在 Angular 8 中在 Facebook 上共享链接时未显示更新的元数据
- javascript - res.download() 执行命令后抛出请求中止错误
- javascript - 如何使用 SAML2 协议客户端?