KeyboardEvent: метод getModifierState()
Базовая поддержка Широко распространена *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
* Некоторые части этой функции могут иметь разный уровень поддержки.
Метод KeyboardEvent.getModifierState() возвращает текущее состояние указанной модификаторной клавиши: true если модификатор активен (то есть клавиша модификатора нажата или заблокирована), в противном случае, false.
Синтаксис
getModifierState(key)
Параметры
key-
Значение модификаторной клавиши. Значение должно быть одним из значений
KeyboardEvent.key, которые представляют модификаторные клавиши, или строкой"Accel"Устаревший . Регистр имеет значение.
Возвращаемое значение
Булево значение.
Модификаторные клавиши в Firefox
Когда getModifierState() возвращает true в Firefox?
| 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, но мы не уверены, какая клавиша активирует модификатор. Клавиша Fn на клавиатуре Mac не вызывает это состояние. |
"FnLock" | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
"Hyper" | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
"Meta" | Нажата клавиша ⊞ Windows Logo (с Firefox 118) | Нажата клавиша Meta | Нажата клавиша ⌘ Command | ❌ Не поддерживается | Нажата клавиша ⊞ Windows Logo или command |
"NumLock" | Включён индикатор Num Lock | Нажата клавиша на цифровом блоке | ❌ Не поддерживается | Включен NumLock | |
"OS" | Нажата клавиша ⊞ Windows Logo (до Firefox 118) | Нажата клавиша Super или Hyper (обычно сопоставлена с ⊞ Windows Logo) | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
"ScrollLock" | Включён индикатор Scroll Lock | Включён индикатор Scroll Lock, но обычно это не поддерживается платформой | ❌ Не поддерживается | ❌ Не поддерживается | Включен ScrollLock |
"Shift" | Нажата клавиша ⇧ Shift | ||||
"Super" | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
"Symbol" | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
"SymbolLock" | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается | ❌ Не поддерживается |
- На других платформах могут поддерживаться "Alt", "Control" и "Shift".
- Все модификаторы (кроме
"FnLock","Hyper","Super"и"Symbol", которые определяются после реализации этой функции в Firefox) всегда поддерживаются для небезопасных событий в Firefox. Это не зависит от платформы.
"Accel" виртуальный модификатор
Примечание: Виртуальный модификатор "Accel" фактически устарел в текущих черновиках спецификации DOM3 Events.
getModifierState() также принимает устаревший виртуальный модификатор "Accel". event.getModifierState("Accel") возвращает true , когда по крайней мере один из KeyboardEvent.ctrlKey или KeyboardEvent.metaKey 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 Events # dom-keyboardevent-getmodifierstate |
Совместимость браузеров
| Стационарные компьютеры | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
getModifierState |
30 | 12 | 15 | 17 | 10.1 | 30 | 15 | 18 | 10.3 | 2.0 | 4.4 |
key_parameter_accel |
48 | ≤79 | 32 | 35 | Нет | 48 | 32 | 35 | Нет | 5.0 | 48 |
key_parameter_alt |
30 | 12 | 15 | 17 | 10.1 | 30 | 15 | 18 | 10.3 | 2.0 | 4.4 |
key_parameter_altgraph |
48 | 79 | 15 | 35 | 10.1 | 48 | 15 | 35 | 10.3 | 5.0 | 48 |
key_parameter_capslock |
48 | 12 | 15 | 35 | 10.1 | 48 | 15 | 35 | 10.3 | 5.0 | 48 |
key_parameter_control |
30 | 12 | 15 | 17 | 10.1 | 30 | 15 | 18 | 10.3 | 2.0 | 4.4 |
key_parameter_fn |
48 | 79 | 15 | 35 | Нет | 48 | 15 | 35 | Нет | 5.0 | 48 |
key_parameter_meta |
30 | 79 | 15 | 17 | 10.1 | 30 | 15 | 18 | 10.3 | 2.0 | 4.4 |
key_parameter_numlock |
48 | ≤79 | 15 | 35 | Нет | 48 | 15 | 35 | Нет | 5.0 | 48 |
key_parameter_os |
48 | 7912–79 | 15 | 35 | Нет | 48 | 15 | 35 | Нет | 5.0 | 48 |
key_parameter_scrolllock |
48 | 7912–79 | 15 | 35 | Нет | 48 | 15 | 35 | Нет | 5.0 | 48 |
key_parameter_shift |
30 | 12 | 15 | 17 | 10.1 | 30 | 15 | 18 | 10.3 | 2.0 | 4.4 |
key_parameter_symbol |
48 | 79 | Нет | 35 | Нет | 48 | Нет | 35 | Нет | 5.0 | 48 |
См. также
- Раздел
KeyboardEventк которому относится этот метод. MouseEvent.getModifierState
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState