KeyboardEvents 有什麼新功能?金鑰和代碼!

過去幾個版本的 Chrome 都新增了兩個 KeyboardEvent,用於傳遞至 keydownkeypresskeyup 事件監聽器的參數。code 屬性 (Chrome 48 中新增) 和 key 屬性 (Chrome 51 中新增) 都能讓開發人員以簡單的方式取得資訊,否則使用舊版屬性會困難

程式碼屬性

首先是 code 屬性。此屬性會設為字串,代表按下產生 KeyboardEvent 的按鍵,但不考量目前的鍵盤配置 (例如 QWERTYDvorak)、語言代碼 (例如英文與法文),或任何輔助鍵。當您想知道按下的是哪個實體鍵,而非對應的字元時,這項功能就很實用。舉例來說,如果您正在編寫遊戲,可能會希望使用特定一組按鍵來讓玩家移動到不同方向,而這類對應方式最好不受鍵盤配置影響。

鍵屬性

接下來,我們有新的 key 屬性。這項屬性也設為 字串,但 code 會傳回按下實體鍵的相關資訊,而 key 則會考量目前的鍵盤配置、語言代碼和輔助鍵,並包含該鍵產生的字元。如要瞭解畫面上會顯示哪些字元 (就像使用者輸入文字輸入內容一樣),請查看 key 屬性的值。

實務上該怎麼做呢?

舉例來說,假設使用者使用的是美國鍵盤,並採用 QWERTY 鍵盤配置。按下鍵盤上的實體 Q 鍵,就會產生 KeyboardEvent,其中 code 屬性設為 "KeyQ"。無論鍵盤配置為何,也無論是否有任何其他輔助鍵,這項規則都適用。舉例來說,在法文 (AZERTY) 鍵盤上,這個按鍵仍會顯示 "KeyQ"code,即使鍵帽上印的字母是「a」。在同一個美國鍵盤上按下實體 Q 鍵,通常會產生 KeyboardEvent,其中 key 設為 "q" (沒有輔助鍵)、"Q" (使用 Shift 或 Caps Lock) 或 "œ" (在 OS X 上使用 Alt)。在法文 AZERTY 鍵盤上,這個按鍵會產生「a」(或搭配 Shift 或 CapsLock 鍵的「A」)。對於其他鍵盤配置,key 值可以是 "й""ض""ㅂ""た" 或其他字元。回到先前的遊戲範例,如果您希望遊戲使用 WASD 鍵進行移動,可以使用 code 屬性,並檢查 "KeyW""KeyA""KeyS""KeyD"。這項功能適用於所有鍵盤和版面配置,甚至是會互換「w」和「z」鍵位置的 AZERTY 鍵盤。

虛擬鍵盤

您會發現,到目前為止,我們一直著重於實體鍵盤的行為。使用者在虛擬鍵盤或其他輸入裝置上輸入內容時,會如何處理?規格提供 code 屬性的官方指南。總而言之,模仿標準鍵盤配置的虛擬鍵盤應會設定適當的 code 屬性,但採用非傳統配置的虛擬鍵盤可能完全不會設定 code

key 屬性則較為直觀,您應該會將其設為字串,並根據使用者 (虛擬) 輸入的字元。

立即試用

Gary Kačmarčík 製作了精彩的示範,可視覺化顯示與 KeyboardEvent 相關聯的所有屬性:

KeyboardEvent 屬性

跨瀏覽器支援

截至本文撰寫時,code 屬性僅支援 Chrome 48 以上版本、Opera 35 以上版本和 Firefox 44 以上版本。key 屬性則支援 Firefox 44 以上版本、Chrome 51 以上版本和 Opera 38 以上版本,且在 Internet Explorer 9 以上版本和 Edge 13 以上版本中部分支援