KeyboardEvent.getModifierState()
KeyboardEvent.getModifierState() メソッドは、指定された修飾キーの現在の状態を返します。修飾キーが有効な場合(すなわち修飾キーが押されているかロックされている場合)は true、そうでなければ false になります。
構文
js
getModifierState(key)
引数
key-
修飾キーの値。値は修飾キーを表す
KeyboardEvent.key値のいずれか、または文字列"Accel"非推奨 でなければなりません。これは大文字と小文字を区別します。
返値
論理値です。
Internet Explorer での修飾キー
IE9 は "Scroll" が "ScrollLock" を、 "Win" が
"OS" を表します。
Gecko での修飾キー
Gecko で getModifierState() が true を返すときです。
| Windows | Linux (GTK) | Mac | Android 2.3 | Android 3.0 or latter | |
|---|---|---|---|---|---|
"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" |
❌ 未対応 | Meta キーが押されている | ⌘ Command キーが押されている | ❌ 未対応 | ⊞ Windows ロゴ キーまたは command キーが押されている |
"NumLock" |
Num Lock の LED がオンになっている間 | A key on numpad pressed | ❌ 未対応 | NumLock がロックされている間 | |
"OS" |
⊞ Windows ロゴ キーが押されている | Super キーまたは Hyper キーが押されている(ふつう、 ⊞ Windows ロゴ キーに割り当てられている) | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"ScrollLock" |
Scroll Lock の LED がオンになっている間 | Scroll Lock の LED がオンになっている間、ただしふつうはプラットフォームが対応していない | ❌ 未対応 | ❌ 未対応 | ScrollLock がロックされている間 |
"Shift" |
⇧ Shift キーが押されている | ||||
"Super" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"Symbol" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
"SymbolLock" |
❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 | ❌ 未対応 |
- その他のプラットフォームでは、 "Alt", "Control", "Shift" に対応する場合があります。
- すべての修飾子(Gecko がこれを実装した後に定義された
"FnLock","Hyper","Super","Symbol")が、Gecko 上の信頼されないイベントに対して常にサポートされます。これはプラットフォームには依存しません。
"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" という設定項目でカスタマイズすることができます。
例
js
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 Gecko
event.preventDefault(); // consume the key event
break;
case "ArrowLeft":
case "Left": // hack for IE and old Gecko
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowRight":
case "Right": // hack for IE and old Gecko
// Do something different if ScrollLock is locked.
event.preventDefault(); // consume the key event
break;
case "ArrowUp":
case "Up": // hack for IE and old Gecko
// 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