如何合理检测无修饰键情况下的指定按键按下操作?
检测无修饰键时的按键按下
问题1:如何以最合理的方式检测某个按键(如F键)在未按下任何修饰键(如Ctrl、Alt、Alt Gr)时被按下?
有两种常用的可靠实现方式:
方式一:直接利用KeyboardEvent的内置属性
通过ctrlKey、altKey属性判断对应修饰键状态,同时通过event.key判断AltGraph键是否被按下,示例代码:
window.addEventListener("keydown", (event) => { if (!event.ctrlKey && !event.altKey && event.key !== "AltGraph" && event.key === "f") { doSomething(); } });
方式二:使用getModifierState()方法
该方法可以统一检测各类修饰键的激活状态,代码可读性更强,示例:
window.addEventListener("keydown", (event) => { if (!event.getModifierState("Control") && !event.getModifierState("Alt") && !event.getModifierState("AltGraph") && event.key === "f") { doSomething(); } });
问题2:是否必须逐一显式判断所有修饰键?
是的。因为各类修饰键的状态是独立的,需要分别确认它们都未被激活,才能保证目标按键是在无修饰的场景下触发的。如果只需要排除特定的几种修饰键(比如上述的Ctrl、Alt、Alt Gr),仅判断这几个即可,无需额外处理其他不相关的修饰键。
内容的提问来源于stack exchange,提问作者Three Year Old
相关产品推荐
相关产品推荐

