1. 程式人生 > 其它 >事件型別-鍵盤事件

事件型別-鍵盤事件

型別

鍵盤事件用來描述鍵盤行為,主要有keydown、keypress、keyup三個事件

keydown   當用戶按下鍵盤上的任意鍵時觸發,如果按住不放的話,會重複觸發該事件
keyup     當用戶釋放鍵盤上任意鍵時觸發
keypress  當用戶按下鍵盤上的字元鍵時觸發,按下功能鍵時不觸發。如果按住不放的話,會重複觸發該事件

注意:

  1. 鍵盤事件必須繫結在可以獲得焦點的元素上,頁面剛載入完成時,焦點處於document元素。
  2. 系統為了防止按鍵誤被連續按下,第一次觸發keydown事件後,會有500ms的延遲,才會觸發第二次keydown事件。keypress事件也存在500ms的時間間隔
  3. 被系統佔用的按鍵不會觸發鍵盤事件,比如亮度調節、音量調節,另外如果瀏覽器安裝了“快捷鍵”相關的外掛,自定義的鍵盤事件也會被覆蓋掉

順序

如果使用者一直按鍵不鬆開,就會連續觸發鍵盤事件,順序如下

keydown
keypress
keydown
keypress
...
keyup

按鍵資訊

鍵盤事件包括keyCode、key、char、keyIdentifier和修改鍵共5個按鍵資訊

keyCode

觸發鍵盤事件時,事件物件的keyCode屬性會包含一個程式碼

document.onkeydown = function(e) {
  console.log(e.keyCode)
}

具體鍵值可移步於此

key

觸發鍵盤事件時,key屬性會包含一個字串。如果按下的是字元鍵,key值就是相應的文字字元;如果不是字元鍵,key值就是相應的鍵名

document.onkeydown = function(e) {
  console.log(e.key)
}

修改鍵

修改鍵指的是Shift、Ctrl、Alt和Meta(Meta在Windows鍵盤中是windows鍵,在蘋果機中是command鍵)。DOM規定了4個屬性,表示這些修改鍵的狀態:shiftKey、ctrlKey、altKey和metaKey。這些屬性中包含的都是布林值,如果相應的鍵被按下了,則值為true;否則值為false

document.onkeyup = function(e) {
  if(e.shiftKey){console.log('shiftKey')}
  if(e.ctrlKey){console.log('ctrlKey')}
  if(e.altKey){console.log('altKey')}
  if(e.metaKey){console.log('metaKey')}
}
部落格: https://blog.86886.wang
GitHub: https://github.com/wmui