KeyboardEvent: getModifierState() メソッド
KeyboardEvent.getModifierState()
メソッドは、指定された修飾キーの現在の状態を返します。修飾キーが有効な場合(すなわち修飾キーが押されているかロックされている場合)は true
、そうでなければ false
になります。
構文
getModifierState(key)
引数
key
-
修飾キーの値。値は修飾キーを表す
KeyboardEvent.key
値のいずれか、または文字列"Accel"
非推奨 でなければなりません。これは大文字と小文字を区別します。
返値
論理値です。
Firefox での修飾キー
Firefox で getModifierState()
が true を返すときです。
Windows | Linux (GTK) | Mac | Android 2.3 | Android 3.0 or later | |
---|---|---|---|---|---|
"Alt" |
Alt キーか AltGr キーが押されている | Alt キーが押されている | ⌥ Option キーが押されている | Alt キーか option キーが押されている | |
"AltGraph" |
Alt と Ctrl の両方のキーが押されている、または AltGr キーが押されている |
Level 3 Shift キー(または Level 5 Shift キー)が押されている | ⌥ Option キーが押されている | ❌ 未対応 | ❌ 未対応 |
"CapsLock" |
⇪ Caps Lock の LED がオンになっている間 | ❌ 未対応 | CapsLock がロックされている間 | ||
"Control" |
Ctrl キーか AltGr キーが押されている | Ctrl キーが押されている | control キーが押されている | menu キーが押されている | Ctrl キー、 control キー、 menu キーの何れかが押されている |
"Fn" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | Function キーが押されているが、どのキーが修飾状態をアクティブにするのかが分からない。 Mac のキーボードの Fn キーでは、このアクティブな状態は発生しません。 |
"FnLock" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"Hyper" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"Meta" |
⊞ Windows ロゴ キーが押されている(Firefox 118 以降) | Meta キーが押されている | ⌘ Command キーが押されている | ❌ 未対応 | ⊞ Windows ロゴ キーまたは command キーが押されている |
"NumLock" |
Num Lock の LED がオンになっている間 | A key on numpad pressed | ❌ 未対応 | NumLock がロックされている間 | |
"OS" |
⊞ Windows ロゴ キーが押されている(Firefox 118 より前) | Super キーまたは Hyper キーが押されている(ふつう、 ⊞ Windows ロゴ キーに割り当てられている) | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"ScrollLock" |
Scroll Lock の LED がオンになっている間 | Scroll Lock の LED がオンになっている間、ただしふつうはプラットフォームが対応していない | ❌ 未対応 | ❌ 未対応 | 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
の方がよりお勧めです。
仕様書
Specification |
---|
UI Events # dom-keyboardevent-getmodifierstate |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- このメソッドの所属先の
KeyboardEvent
MouseEvent.getModifierState