KeyboardEvent: getModifierState() 方法
Baseline 广泛可用 *
KeyboardEvent.getModifierState() 方法返回指定修饰键的当前状态:如果修饰键处于活动状态(即修饰键被按下或锁定),则返回 true,否则返回 false。
语法
getModifierState(key)
参数
key-
一个修饰键值。该值必须是表示修饰键的
KeyboardEvent.key值之一,或者字符串"Accel"已弃用 。此值区分大小写。
返回值
布尔值。
Firefox 中的修饰键
在 Firefox 中,getModifierState() 何时返回 true?
| Windows | Linux (GTK) | Mac | Android 2.3 | Android 3.0 或更高版本 | |
|---|---|---|---|---|---|
"Alt" |
按下 Alt 键或 AltGr 键 | 按下 Alt 键 | 按下 ⌥ Option 键 | 按下 Alt 键或 option 键 | |
"AltGraph" |
同时按下 Alt 和 Ctrl 键,或按下 AltGr 键 |
按下 Level 3 Shift 键(或 Level 5 Shift 键) | 按下 ⌥ Option 键 | ❌ 不支持 | ❌ 不支持 |
"CapsLock" |
在 ⇪ Caps Lock 指示灯亮起时 | ❌ 不支持 | CapsLock 被锁定期间 | ||
"Control" |
按下 Ctrl 键或 AltGr 键 | 按下 Ctrl 键 | 按下 control 键 | 按下 menu 键。 | 按下 Ctrl 键、control 键或 menu 键。 |
"Fn" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | 按下 Function 键,但不确定哪个键激活了修饰键状态。Mac 键盘上的 Fn 键不会导致此状态激活。 |
"FnLock" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
"Hyper" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
"Meta" |
(Firefox 118 及更高版本) 按下 ⊞ Windows Logo 键 | 按下 Meta 键 | 按下 ⌘ Command 键 | ❌ 不支持 | 按下 ⊞ Windows Logo 键或 command 键 |
"NumLock" |
在 Num Lock 指示灯亮起时 | 按下数字键盘上的某个键 | ❌ 不支持 | NumLock 被锁定期间 | |
"OS" |
(Firefox 118 之前) 按下 ⊞ Windows Logo 键 | 按下 Super 键或 Hyper 键(通常映射到 ⊞ Windows Logo 键) | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
"ScrollLock" |
在 Scroll Lock 指示灯亮起时 | 在 Scroll Lock 指示灯亮起时,但平台通常不支持此功能 | ❌ 不支持 | ❌ 不支持 | ScrollLock 被锁定期间 |
"Shift" |
按下 ⇧ Shift 键 | ||||
"Super" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
"Symbol" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
"SymbolLock" |
❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
- 在其他平台上,"Alt"、"Control" 和 "Shift" 可能会得到支持。
- 对于不可信事件,Firefox 始终支持所有修饰键("FnLock"、"Hyper"、"Super" 和 "Symbol" 除外,这些是在 Firefox 实现之后定义的)。这不取决于平台。
"Accel" 虚拟修饰键
注意: "Accel" 虚拟修饰键在 DOM3 Events 规范的当前草案中已被实际弃用。
getModifierState() 还接受一个已弃用的虚拟修饰键 "Accel"。event.getModifierState("Accel") 在 KeyboardEvent.ctrlKey 或 KeyboardEvent.metaKey 至少有一个为 true 时返回 true。
在旧的实现和过时的规范中,当按下用于快捷键的典型修饰键时,它会返回 true。例如,在 Windows 上,按下 Ctrl 键可能会使其返回 true。但是,在 Mac 上,按下 ⌘ Command 键可能会使其返回 true。请注意,哪个修饰键使其返回 true 取决于平台、浏览器和用户设置。例如,Firefox 用户可以通过首选项 "ui.key.accelKey" 来自定义此行为。
示例
function handleKeyboardEvent(event) {
// Ignore if following modifier is active.
if (
event.getModifierState("Fn") ||
event.getModifierState("Hyper") ||
event.getModifierState("OS") ||
event.getModifierState("Super") ||
event.getModifierState("Win") /* hack for IE */
) {
return;
}
// Also ignore if two or more modifiers except Shift are active.
if (
event.getModifierState("Control") +
event.getModifierState("Alt") +
event.getModifierState("Meta") >
1
) {
return;
}
// Handle shortcut key with standard modifier
if (event.getModifierState("Accel")) {
switch (event.key.toLowerCase()) {
case "c":
if (event.getModifierState("Shift")) {
// Handle Accel + Shift + C
event.preventDefault(); // consume the key event
}
break;
case "k":
if (!event.getModifierState("Shift")) {
// Handle Accel + K
event.preventDefault(); // consume the key event
}
break;
}
return;
}
// Do something different for arrow keys if ScrollLock is locked.
if (
(event.getModifierState("ScrollLock") ||
event.getModifierState("Scroll")) /* hack for IE */ &&
!event.getModifierState("Control") &&
!event.getModifierState("Alt") &&
!event.getModifierState("Meta")
) {
switch (event.key) {
case "ArrowDown":
case "Down": // hack for IE and old Firefox
event.preventDefault(); // consume the key event
break;
case "ArrowLeft":
case "Left": // hack for IE and old Firefox
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowRight":
case "Right": // hack for IE and old Firefox
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowUp":
case "Up": // hack for IE and old Firefox
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
}
}
}
注意: 尽管此示例在 .getModifierState() 中使用了 "Alt"、"Control"、"Meta" 和 "Shift",但使用 event.altKey、event.ctrlKey、event.metaKey 和 event.shiftKey 可能更可取。
规范
| 规范 |
|---|
| UI 事件 # dom-keyboardevent-getmodifierstate |
浏览器兼容性
加载中…