提问人:Pekka 提问时间:11/10/2009 最后编辑:Brian Tompsett - 汤莱恩Pekka 更新时间:5/7/2021 访问量:4507
检测 JS 中的双 Ctrl 按键
Detect double Ctrl keypress in JS
问:
我有一个自定义 CMS,并想添加一个“快捷菜单”,该菜单由在 300 毫秒内按两次键触发。 我使用原型,所以我的出发点显然是:Ctrl
Event.observe(document, 'keypress', function(event)
{ if(event.keyCode == Event.KEY_XYZ) { show_shortcuts});
我目前的方法是用当前时间(以毫秒为单位)填充全局变量,并在每次按键时检查按键是否发生在不到 300 毫秒之前。
但也许有一个更优雅的解决方案?
答:
9赞
jitter
11/10/2009
#1
这应该有效。如果没有同时按下其他键(如 Alt 或 Shift),可能会添加一些进一步的检查。希望它是不言自明的,如果不是只是问,我会提供澄清。
var dblCtrlKey = 0;
Event.observe(document, 'keydown', function(event) {
if (dblCtrlKey != 0 && event.ctrlKey) {
alert("Ok double ctrl");
dblCtrlKey = 0;
} else {
dblCtrlKey = setTimeout('dblCtrlKey = 0;', 300);
}
});
https://jsfiddle.net/3tc26g7x/
评论
0赞
Pekka
11/10/2009
它可以工作,但是当按住 Ctrl 键 300 毫秒时,它也会触发。我将不得不添加一个“keyup”检查器,但这将作为它的基础。干杯!
0赞
jitter
11/10/2009
当按键保持按下状态时,它不会为我触发。可能是特定于浏览器的(我正在使用 Opera)
1赞
yckart
12/2/2012
@Pekka只是改用;-)keyup
0赞
bijayshrestha
2/19/2020
@jitter我确实尝试了您的解决方案,但是,即使 dblCtrlKey 值打印为 139,也可以按 ctrl 键。我想知道我错过了什么。如果您有被剪裁的演示,我将不胜感激。
0赞
jitter
5/7/2021
@bijayshrestha添加了一个 jsfiddle。变量的值无关紧要dblCtrlKey
4赞
Roland
3/23/2020
#2
function doubleControlEvent() {
if (event.key === 'Control') {
timesCtrlClicked++
if (timesCtrlClicked >= 2) {
console.log('Double control')
// Double Crtl is clicked add your code here
}
setTimeout(() => (timesCtrlClicked = 0), 200)
}
}
let timesCtrlClicked = 0;
document.addEventListener('keyup', doubleControlEvent, true)
评论