JavaScript | キーボードの入力イベントを実装する方法
JavaScriptだけでキーボードの入力情報をaddEventListener()
メゾッドで取得して発火イベントを実装する方法のサンプルコード集です。
「onkeydown」「onkeypress」「onkeyup」などのDOM oneventハンドラーでの実装方法は別ページでの紹介となっています。
キーボードの入力イベントの実装サンプル
addEventListener()
メゾッドを利用したキーボード入力イベントの実装サンプルとサンプルコードになります。
See the Pen JavaScript addEventListener key event by yochans (@yochans) on CodePen.
上記の動作サンプルとして紹介している処理のサンプルコードになります。
<p id="output"></p>
document.addEventListener('keypress', keypress_ivent);
document.addEventListener('keyup', keyup_ivent);
function keypress_ivent(e) {
document.getElementById('output').innerHTML = e.key;
return false;
}
function keyup_ivent(e) {
document.getElementById('output').innerHTML = '';
return false;
}
キーボードの入力を取得する
キーボードの入力を取得するにはaddEventListener()を利用します。
キーボードのいずれかのキーが押された時の処理には「keypress」、押されている間実行を繰り返す場合は「keydown」キーが離された時の処理には「keyup」を第一引数に指定します。
第二引数には呼び出す関数が指定できます。
document.addEventListener('keypress', keypress_ivent);
function keypress_ivent(e) {
//いずれかのキーが押された時の処理
return false;
}
document.addEventListener('keydown', keypress_ivent);
function keydown_ivent(e) {
//いずれかのキーが押されている時の処理
return false;
}
document.addEventListener('keyup', keyup_ivent);
function keyup_ivent(e) {
//いずれかのキーが離された時の処理
return false;
}
キーボード入力イベントの種類
addEventListener()で利用できるキー入力イベントの種類まとめです。
サンプルでは矢印キーの操作などを除いて主に「keypress」「keyup」を利用して紹介しています。
Keydowm | いずれかのキーが押されている時 |
keyup | いずれかの押されていたキーが離された時 |
特定のキー入力イベントを実装する
特定のキー入力イベントを実装する場合、「key」「keyCode」「code」の情報を元に判別します。
「key」と「keyCode」はデバイスの英字入力設定に依存して大文字・小文字を区別して取得しますのでいずれの場合も処理したい場合は大文字・小文字の両方を判別フラグに含めます。
また「code」は大文字・小文字の区別なく同一のコードを取得していますので、以下の様に記述可能となっています。
Aキーが押された場合の処理(e.key)
document.addEventListener('keypress', keypress_ivent);
function keypress_ivent(e) {
if(e.key === 'a' || e.key === 'A'){
//Aキーが押された時の処理
}
return false;
}
Aキーが押された場合の処理(e.code)
document.addEventListener('keypress', keypress_ivent);
function keypress_ivent(e) {
if(e.code === 'KeyA'){
//Aキーが押された時の処理
}
return false;
}
Enterキーが押された場合の処理(e.code)
Enterキーはいずれの場合も、「key」「code」ともに「Enter」となっています。
document.addEventListener('keypress', keypress_ivent);
function keypress_ivent(e) {
if(e.code === 'Enter'){
//Enterキーが押された時の処理
}
return false;
}
Enterキーが押された場合の処理(e.keyCode)
「keyCode」はキーの番号で扱う事が可能です。
Enterキーの場合は「keyCode」にて「13」となっています。
document.addEventListener('keypress', keypress_ivent);
function keypress_ivent(e) {
if(e.code === 'Enter'){
//Enterキーが押された時の処理
}
return false;
}
「key」「code」「keyCode」の一覧をこのページの最後で紹介していますので是非ご活用下さい。
ShiftキーやCtrl、altキーの同時押しイベントの実装方法
ShiftキーやCtrl、altキーとの同時押しを取得したキーイベントを実装する方法です。
これらのキーは別のキーを押された際に取得するキー入力イベント情報に押されているかどうかの情報が入っていますので、それらを参照します。
例えば、Shiftキーの同時押しのみを検出する場合、「shiftKey」を参照します。
Shiftキーが押されている場合、「shiftKey」は「true」となっていますので判別します。
document.addEventListener('keydown', key_press_ivent);
function keydown_ivent(e) {
if(e.shiftKey === true){
document.getElementById('output').innerHTML = e.key;
}
return false;
}
※Shiftキーが同時に押されている場合、取得した情報の「key」には通常はアルファベットなら「a」ではなく大文字として「A」が代入されます。(デバイスの設定に依存し、逆になっている場合もあります。)
Shiftキー | e.shiftKey |
Ctrlキー | e.ctrlKey |
Altキー | e.altKey |
矢印キーを使ったキー入力イベントの実装方法
矢印キー(方向キー)などのキーは「keypress」で取得できませんので「keydown」を利用して取得します。
See the Pen JavaScript addEventListener arrow key event by yochans (@yochans) on CodePen.
document.addEventListener('keydown', keydown_ivent);
document.addEventListener('keyup', keyup_ivent);
function keydown_ivent(e) {
let key = '';
switch (e.key) {
case 'ArrowUp':
key = '↑';
break;
case 'ArrowDown':
key = '↓';
break;
case 'ArrowLeft':
key = '←';
break;
case 'ArrowRight':
key = '→';
break;
}
document.getElementById('output').innerHTML = key;
return false;
}
function keyup_ivent(e) {
document.getElementById('output').innerHTML = '';
return false;
}
キー名、キーコード名一覧
「keypress(一部)」や「「keydown」「keyup」で取得可能な各キーの「key」「code」「keyCode」一覧表です。
e.key | e.code | e.keyCode | |
---|---|---|---|
Back Space | Backspace | Backspace | 8 |
Tab | Tab | Tab | 9 |
Enter | Enter | Enter NumpadEnter | 13 |
Shift | Shift | ShiftLeft ShiftRight | 16 |
Ctrl | Control | ControlLeft ControlRight | 17 |
Alt | Alt | AltLeft AltRight | 18 |
Pause | Pause | Pause | 19 |
Esc | Escape | Escape | 27 |
スペースキー | " “ | Space | 32 |
PageUp | PageUp | PageUp | 33 |
PageDown | PageDown | PageDown | 34 |
End | End | End | 35 |
Home | Home | Home | 36 |
Insert | Insert | Insert | 45 |
Delete | Delete | Delete | 46 |
0~9 | 0~9 | Digit0~Digit9 | 48~57 |
A~Z | aA~zZ | KeyA~KeyZ | 65~90 |
Windowsキー | Meta | MetaLeft | 91 |
0~9(テンキー) | 0~9 | Numpad0~Numpad9 | 96~105 |
*(テンキー) | * | NumpadMultiply | 106 |
+(テンキー) | + | NumpadAdd | 107 |
-(テンキー) | – | NumpadSubtract | 109 |
.(テンキー) | . | NumpadDecimal | 110 |
/(テンキー) | / | NumpadDivide | 111 |
F1~F12 | F1~F12 | F1~F12 | 112~F123 |
Num Lock | NumLock | NumLock | 144 |
Scroll Lock | ScrollLock | ScrollLock | 145 |
: * | 入力値 | Quote | 186 |
; + | 入力値 | Semicolon | 187 |
, < | 入力値 | Comma | 188 |
– = | 入力値 | Minus | 189 |
. > | 入力値 | Period | 190 |
/ ? | 入力値 | Slash | 191 |
@ ` | 入力値 | BracketLeft | 192 |
[ { | 入力値 | BracketRight | 219 |
\ | | 入力値 | IntlYen | 220 |
] } | 入力値 | Backslash | 221 |
^ ~ | 入力値 | Equal | 222 |
\ _ | 入力値 | IntlRo | 226 |
Caps Lock | Alphanumeric | CapsLock | 240 |
半角/全角 | Hankaku Zenkaku | Backquote | 243 244 |
ディスカッション
ivent ではなく event かもしれません…!(間違っていたらすみません)
コメントありがとうございます。
本当ですね、、eventをタイプする時、良くiventと打ってしまう癖がありまして。
修正しようと思いますが、関数名でタイプミスしているのですね、エラーが出ていない訳です。
“keypress” event has been deprecated. Please update your document.
https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event