js常用的鍵盤事件有哪些(用法示例)_鍵碼keyCode對(duì)照表
鍵盤事件與鼠標(biāo)事件類似,同樣常出現(xiàn)在JavaScript開發(fā)過程中。鍵盤事件的觸發(fā)過程具體是這樣的: 在用戶按下鍵盤上的一個(gè)字符鍵時(shí), 首先會(huì)觸發(fā)keydown事件,然后是keypress事件,最后是keyup事件。其中,keydown和keypress事件是在文本框發(fā)生變化之前 被觸發(fā);而keyup在文本框發(fā)生變化之后被觸發(fā)。如果用戶按下一個(gè)鍵不放,就會(huì)重復(fù)觸發(fā)keydown和keypress事件。在用戶按下一個(gè)非字符鍵時(shí),首先觸發(fā)keydown事件,然后就是keyup事件。如果用戶按下一個(gè)鍵不放,就會(huì)重復(fù)觸發(fā)keydown。
一、鍵盤事件屬性
鍵盤定義了很多屬性,如下表所示。利用這些屬性可以精確控制鍵盤操作。鍵盤事件屬性一般只在鍵盤相關(guān)事件發(fā)生時(shí)才會(huì)存在于事件對(duì)象中,但是 ctrlKey 和 shiftKey 屬性除外,因?yàn)樗鼈兛梢栽谒J录写嬖?。例如,?dāng)按下 Ctrl 或Shift 鍵時(shí)單擊鼠標(biāo)操作。
鍵盤事件定義的屬性
屬性 | 說明 |
---|---|
keyCode | 該屬性包含鍵盤中對(duì)應(yīng)鍵位的鍵值 |
charCode | 該屬性包含鍵盤中對(duì)應(yīng)鍵位的 Unicode 編碼,僅 DOM 支持 |
target | 發(fā)生事件的節(jié)點(diǎn)(包含元素),僅 DOM 支持 |
srcElement | 發(fā)生事件的元素,僅 IE 支持 |
shiftKey | 是否按下 Shift 鍵,如果按下返回 true,否則為false |
ctrlKey | 是否按下 Ctrl 鍵,如果按下返回 true,否則為false |
altKey | 是否按下 Alt 鍵,如果按下返回 true,否則為false |
metaKey | 是否按下 Mtea 鍵,如果按下返回 true,否則為false,僅 DOM 支持 |
示例1
ctrlKey 和 shiftKey 屬性可存在于鍵盤和鼠標(biāo)事件中,表示鍵盤上的 Ctrl 和 Shift 鍵是否被按住。下面示例能夠監(jiān)測 Ctrl 和 Shift 鍵是否被同時(shí)按下。如果同時(shí)按下,且鼠標(biāo)單擊某個(gè)頁面元素,則會(huì)把該元素從頁面中刪除。
document.onclick = function (e) { var e = e || window.event; //標(biāo)準(zhǔn)化事件對(duì)象 var t = e.target || e.srcElement; //獲取發(fā)生事件的元素,兼容IE和DOM if (e.ctrlKey && e.shiftKey) { //如果同時(shí)按下Ctrl和Shift鍵 t.parentNode.removeChild(t); //移出當(dāng)前元素 } }
keyCode 和 charCode 屬性使用比較復(fù)雜,但是它們?cè)趯?shí)際開發(fā)中又比較常用,故比較這兩個(gè)屬性在不同事件類型和不同瀏覽器中的表現(xiàn)時(shí)非常必要的,如下表所示。讀者可以根據(jù)需要有針對(duì)性的選用事件響應(yīng)類型和引用屬性值。
keyCode 和 charCode 屬性值
屬性 | IE 事件模型 | DOM 事件模型 |
---|---|---|
keyCode(keypress) | 返回所有字符鍵的正確值,區(qū)分大寫狀態(tài)(65~90)和小寫狀態(tài)(97~122) | 功能鍵返回正確值,而 Shift、Ctrl、Alt、PrintScreen、ScrollLock 無返回值,其他所有鍵值都返回 0 |
keyCode(keydown) | 返回所有鍵值(除 PrintScreen 鍵),字母鍵都以大寫狀態(tài)顯示鍵值(65~90) | 返回所有鍵值(除 PrintScreen 鍵),字母鍵都以大寫狀態(tài)顯示鍵值(65~90) |
keyCode(keyup) | 返回所有鍵值(除 PrintScreen 鍵),字母鍵都以大寫狀態(tài)顯示鍵值(65~90) | 返回所有鍵值(除 PrintScreen 鍵),字母鍵都以大寫狀態(tài)顯示鍵值(65~90) |
charCode(keypress) | 不支持該屬性 | 返回字符鍵,區(qū)分大寫狀態(tài)(65~90)和小寫狀態(tài)(97~122),Shift、Ctrl、Alt、PrintScreen、ScrollLock 無返回值,其他所有鍵值都返回 0 |
charCode(keydown) | 不支持該屬性 | 所有鍵值為 0 |
charCode(keyup) | 不支持該屬性 | 所有鍵值為 0 |
某些鍵的可用性不是很正確,如 PageUp 和 Home 鍵等。不過常用功能鍵和字符鍵都是比較穩(wěn)定的。
示例2
下面示例演示了如何使用方向鍵控制頁面元素的移動(dòng)效果。
<div id="box"></div> <script> var box = document.getElementById("box"); // 獲取頁面元素的引用指針 box.style.position = "absolute"; // 色塊絕對(duì)定位 box.style.width = "20px"; // 色塊寬度 box.style.height = "20px"; // 色塊高度 box.style.backgroundColor = "red"; // 色塊背景 document.onkeydown = keyDown; //在Document對(duì)象中注冊(cè)keyDown事件處理函數(shù) function keyDown(event){ // 方向鍵控制元素移動(dòng)函數(shù) var event = event || window.event; // 標(biāo)準(zhǔn)化事件對(duì)象 switch(event.keyCode){ // 獲取當(dāng)前按下鍵盤鍵的編碼 case 37 : // 按下左箭頭鍵,向左移動(dòng)5個(gè)像素 box.style.left = box.offsetLeft - 5 + "px"; break; case 39 : // 按下右箭頭鍵,向右移動(dòng)5個(gè)像素 box.style.left = box.offsetLeft + 5 + "px"; break; case 38 : // 按下上箭頭鍵,向上移動(dòng)5個(gè)像素 box.style.top = box.offsetTop - 5 + "px"; break; case 40 : // 按下下箭頭鍵,向下移動(dòng)5個(gè)像素 box.style.top = box.offsetTop + 5 + "px"; break; } return false } </script>
在上面示例中,首先獲取頁面元素,通過 CSS 腳本控制元素絕對(duì)定位、大小和背景色。然后在 document 對(duì)象上注冊(cè)鼠標(biāo)按下事件類型處理函數(shù),在事件回調(diào)函數(shù) keyDown() 中偵測當(dāng)前按下的方向鍵,并決定定位元素在窗口中的位置。其中元素的 offsetLeft 和 offsetTop 屬性可以存取它在頁面中的位置。
鍵盤響應(yīng)順序
鍵盤事件主要包括下面 3 種類型:
- keydown:在鍵盤上按下某個(gè)鍵時(shí)觸發(fā)。如果按住某個(gè)鍵,會(huì)不斷觸發(fā)該事件,但是 Opera 瀏覽器不支持這種連續(xù)操作。該事件處理函數(shù)返回 false 時(shí),會(huì)取消默認(rèn)的動(dòng)作(如輸入的鍵盤字符,在 IE 和 Safari 瀏覽器下還會(huì)禁止keypress 事件響應(yīng))。
- keypress:按下某個(gè)鍵盤鍵并釋放時(shí)觸發(fā)。如果按住某個(gè)鍵,會(huì)不斷觸發(fā)該事件。該事件處理函數(shù)返回 false 時(shí),會(huì)取消默認(rèn)的動(dòng)作(如輸入的鍵盤字符)。
- keyup:釋放某個(gè)鍵盤鍵時(shí)觸發(fā)。該事件僅在松開鍵盤時(shí)觸發(fā)一次,不是一個(gè)持續(xù)的響應(yīng)狀態(tài)。
當(dāng)獲取用戶正按下鍵碼時(shí),可以使用 keydown、keypress 和 keyup 事件獲取這些信息。其中 keydown 和 keypress 事件基本上是同義事件,它們的表現(xiàn)也完全一致,不過一些瀏覽器不允許使用 keypress 事件獲取按鍵信息。所有元素都支持鍵盤事件,但鍵盤事件多被應(yīng)用在表單輸入中。
當(dāng)按下鍵盤時(shí),會(huì)連續(xù)觸發(fā)多個(gè)事件,它們將按如下順序發(fā)生。
對(duì)于字符鍵來說,鍵盤事件的響應(yīng)順序:keydown → keypress → keyup。對(duì)于非字符鍵(如功能鍵或特殊鍵)來說,鍵盤事件的相應(yīng)順序:keydown → keyup。
如果按下字符鍵不放,則 keydown 和 keypress 事件將逐個(gè)持續(xù)發(fā)生,直至松開按鍵。如果按下非字符鍵不放,則只有 keydown 事件持續(xù)發(fā)生,直至松開按鍵。
示例
下面設(shè)計(jì)一個(gè)簡單示例,以獲取鍵盤事件相應(yīng)順序。
<textarea id="text" cols="26" rows="16"></textarea> <script> var n = 1; // 定義編號(hào)變量 var text = document.getElementById("text"); // 獲取文本區(qū)域的引用指針 text.onkeydown = f; // 注冊(cè)keydown事件處理函數(shù) text.onkeyup = f; // 注冊(cè)keyup事件處理函數(shù) text.onkeypress = f; // 注冊(cè)keypress事件處理函數(shù) function f(e){ // 事件調(diào)用函數(shù) var e = e || window.event; // 標(biāo)準(zhǔn)化事件對(duì)象 text.value += (n++) + "=" + e.type +" (keyCode=" + e.keyCode + ")\n"; //捕獲事件響應(yīng)信息 } </script>
鍵盤鍵碼keyCode對(duì)照表
字母和數(shù)字鍵的鍵碼值(keyCode) | |||||||
---|---|---|---|---|---|---|---|
按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 |
A | 65 | J | 74 | S | 83 | 1 | 49 |
B | 66 | K | 75 | T | 84 | 2 | 50 |
C | 67 | L | 76 | U | 85 | 3 | 51 |
D | 68 | M | 77 | V | 86 | 4 | 52 |
E | 69 | N | 78 | W | 87 | 5 | 53 |
F | 70 | O | 79 | X | 88 | 6 | 54 |
G | 71 | P | 80 | Y | 89 | 7 | 55 |
H | 72 | Q | 81 | Z | 90 | 8 | 56 |
I | 73 | R | 82 | 0 | 48 | 9 | 57 |
數(shù)字鍵盤上的各鍵鍵碼值(keyCode) | 功能鍵鍵碼值(keyCode) | ||||||
---|---|---|---|---|---|---|---|
按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 |
0 | 96 | 8 | 104 | F1 | 112 | F9 | 120 |
1 | 97 | 9 | 105 | F2 | 113 | F10 | 121 |
2 | 98 | * | 106 | F3 | 114 | F11 | 122 |
3 | 99 | + | 107 | F4 | 115 | F12 | 123 |
4 | 100 | Enter | 108 | F5 | 116 | ||
5 | 101 | - | 109 | F6 | 117 | ||
6 | 102 | . | 110 | F7 | 118 | ||
7 | 103 | / | 111 | F8 | 119 |
控制鍵鍵碼值(keyCode) | |||||||
---|---|---|---|---|---|---|---|
按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 | 按鍵 | 鍵碼 |
BackSpace | 8 | Esc | 27 | Right Arrow | 39 | -_ | 189 |
Tab | 9 | Spacebar | 32 | Dw Arrow | 40 | .> | 190 |
Clear | 12 | Page Up | 33 | Insert | 45 | /? | 191 |
Enter | 13 | Page Down | 34 | Delete | 46 | `~ | 192 |
Shift | 16 | End | 35 | Num Lock | 144 | [{ | 219 |
Control | 17 | Home | 36 | ;: | 186 | \| | 220 |
Alt | 18 | Left Arrow | 37 | =+ | 187 | ]} | 221 |
Cape Lock | 20 | Up Arrow | 38 | ,< | 188 | '" | 222 |
多媒體鍵碼值(keyCode) | |||
---|---|---|---|
按鍵 | 鍵碼 | 按鍵 | 鍵碼 |
音量加 | 175 | 瀏覽器 | 172 |
音量減 | 174 | 郵件 | 180 |
停止 | 179 | 搜索 | 170 |
靜音 | 173 | 收藏 | 171 |
到此這篇關(guān)于js常用的鍵盤事件有哪些_用法示例_鍵碼keyCode對(duì)照表的文章就介紹到這了,更多相關(guān)js鍵盤事件keyCode內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何做到打開一個(gè)頁面,過幾分鐘自動(dòng)轉(zhuǎn)到另一頁面
如何做到打開一個(gè)頁面,過幾分鐘自動(dòng)轉(zhuǎn)到另一頁面...2007-04-04JavaScript CSS 修改學(xué)習(xí)第四章 透明度設(shè)置
今天我打算使用一些元素的透明度設(shè)置來實(shí)現(xiàn)淡出淡入效果。但是有些瀏覽器對(duì)于某些元素的透明度設(shè)置支持不夠。而且要設(shè)置表格的透明度,幾乎在所有的瀏覽器里面都不可能。2010-02-02JavaScript入門教程(7) History歷史對(duì)象
JavaScript中的History歷史對(duì)象包含了用戶已瀏覽的 URL 的信息,是指歷史對(duì)象指瀏覽器的瀏覽歷史。2009-01-01