JavaScript 鍵盤事件

2023-03-20 15:47 更新

鍵盤事件的種類

鍵盤事件由用戶擊打鍵盤觸發(fā),主要有keydown、keypress、keyup三個(gè)事件,它們都繼承了KeyboardEvent接口。

  • keydown:按下鍵盤時(shí)觸發(fā)。
  • keypress:按下有值的鍵時(shí)觸發(fā),即按下 Ctrl、Alt、Shift、Meta 這樣無值的鍵,這個(gè)事件不會觸發(fā)。對于有值的鍵,按下時(shí)先觸發(fā)keydown事件,再觸發(fā)這個(gè)事件。
  • keyup:松開鍵盤時(shí)觸發(fā)該事件。

如果用戶一直按鍵不松開,就會連續(xù)觸發(fā)鍵盤事件,觸發(fā)的順序如下。

  1. keydown
  2. keypress
  3. keydown
  4. keypress
  5. ...(重復(fù)以上過程)
  6. keyup

KeyboardEvent 接口概述

KeyboardEvent接口用來描述用戶與鍵盤的互動。這個(gè)接口繼承了Event接口,并且定義了自己的實(shí)例屬性和實(shí)例方法。

瀏覽器原生提供KeyboardEvent構(gòu)造函數(shù),用來新建鍵盤事件的實(shí)例。

new KeyboardEvent(type, options)

KeyboardEvent構(gòu)造函數(shù)接受兩個(gè)參數(shù)。第一個(gè)參數(shù)是字符串,表示事件類型;第二個(gè)參數(shù)是一個(gè)事件配置對象,該參數(shù)可選。除了Event接口提供的屬性,還可以配置以下字段,它們都是可選。

  • key:字符串,當(dāng)前按下的鍵,默認(rèn)為空字符串。
  • code:字符串,表示當(dāng)前按下的鍵的字符串形式,默認(rèn)為空字符串。
  • location:整數(shù),當(dāng)前按下的鍵的位置,默認(rèn)為0
  • ctrlKey:布爾值,是否按下 Ctrl 鍵,默認(rèn)為false。
  • shiftKey:布爾值,是否按下 Shift 鍵,默認(rèn)為false。
  • altKey:布爾值,是否按下 Alt 鍵,默認(rèn)為false。
  • metaKey:布爾值,是否按下 Meta 鍵,默認(rèn)為false。
  • repeat:布爾值,是否重復(fù)按鍵,默認(rèn)為false

KeyboardEvent 的實(shí)例屬性

KeyboardEvent.altKey,KeyboardEvent.ctrlKey,KeyboardEvent.metaKey,KeyboardEvent.shiftKey #

以下屬性都是只讀屬性,返回一個(gè)布爾值,表示是否按下對應(yīng)的鍵。

  • KeyboardEvent.altKey:是否按下 Alt 鍵
  • KeyboardEvent.ctrlKey:是否按下 Ctrl 鍵
  • KeyboardEvent.metaKey:是否按下 meta 鍵(Mac 系統(tǒng)是一個(gè)四瓣的小花,Windows 系統(tǒng)是 windows 鍵)
  • KeyboardEvent.shiftKey:是否按下 Shift 鍵

下面是一個(gè)示例。

function showChar(e) {
  console.log('ALT: ' + e.altKey);
  console.log('CTRL: ' + e.ctrlKey);
  console.log('Meta: ' + e.metaKey);
  console.log('Shift: ' + e.shiftKey);
}

document.body.addEventListener('keydown', showChar, false);

KeyboardEvent.code

KeyboardEvent.code屬性返回一個(gè)字符串,表示當(dāng)前按下的鍵的字符串形式。該屬性只讀。

下面是一些常用鍵的字符串形式,其他鍵請查文檔。

  • 數(shù)字鍵0 - 9:返回digit0 - digit9
  • 字母鍵A - z:返回KeyA - KeyZ
  • 功能鍵F1 - F12:返回 F1 - F12
  • 方向鍵:返回ArrowDownArrowUp、ArrowLeft、ArrowRight
  • Alt 鍵:返回AltLeftAltRight
  • Shift 鍵:返回ShiftLeftShiftRight
  • Ctrl 鍵:返回ControlLeftControlRight

KeyboardEvent.key

KeyboardEvent.key屬性返回一個(gè)字符串,表示按下的鍵名。該屬性只讀。

如果按下的鍵代表可打印字符,則返回這個(gè)字符,比如數(shù)字、字母。

如果按下的鍵代表不可打印的特殊字符,則返回預(yù)定義的鍵值,比如 Backspace,Tab,Enter,Shift,Control,Alt,CapsLock,Esc,Spacebar,PageUp,PageDown,End,Home,Left,Right,Up,Down,PrintScreen,Insert,Del,Win,F(xiàn)1~F12,NumLock,Scroll 等。

如果同時(shí)按下一個(gè)控制鍵和一個(gè)符號鍵,則返回符號鍵的鍵名。比如,按下 Ctrl + a,則返回a;按下 Shift + a,則返回大寫的A。

如果無法識別鍵名,返回字符串Unidentified。

KeyboardEvent.location

KeyboardEvent.location屬性返回一個(gè)整數(shù),表示按下的鍵處在鍵盤的哪一個(gè)區(qū)域。它可能取以下值。

  • 0:處在鍵盤的主區(qū)域,或者無法判斷處于哪一個(gè)區(qū)域。
  • 1:處在鍵盤的左側(cè),只適用那些有兩個(gè)位置的鍵(比如 Ctrl 和 Shift 鍵)。
  • 2:處在鍵盤的右側(cè),只適用那些有兩個(gè)位置的鍵(比如 Ctrl 和 Shift 鍵)。
  • 3:處在數(shù)字小鍵盤。

KeyboardEvent.repeat

KeyboardEvent.repeat返回一個(gè)布爾值,代表該鍵是否被按著不放,以便判斷是否重復(fù)這個(gè)鍵,即瀏覽器會持續(xù)觸發(fā)keydownkeypress事件,直到用戶松開手為止。

KeyboardEvent 的實(shí)例方法

KeyboardEvent.getModifierState()

KeyboardEvent.getModifierState()方法返回一個(gè)布爾值,表示是否按下或激活指定的功能鍵。它的常用參數(shù)如下。

  • Alt:Alt 鍵
  • CapsLock:大寫鎖定鍵
  • Control:Ctrl 鍵
  • Meta:Meta 鍵
  • NumLock:數(shù)字鍵盤開關(guān)鍵
  • Shift:Shift 鍵
if (
  event.getModifierState('Control') +
  event.getModifierState('Alt') +
  event.getModifierState('Meta') > 1
) {
  return;
}

上面代碼表示,只要Control、Alt、Meta里面,同時(shí)按下任意兩個(gè)或兩個(gè)以上的鍵就返回。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號