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 |
瀏覽器相容性
載入中…