JS事件—鍵盤事件

鍵盤事件的種類

鍵盤事件由用戶擊打鍵盤觸發(fā)面殖,主要有keydownkeypress哭廉、keyup三個(gè)事件脊僚,它們都繼承了KeyboardEvent接口。

  • keydown:按下鍵盤時(shí)觸發(fā)群叶。
  • keypress:按下有值的鍵時(shí)觸發(fā)吃挑,即按下 Ctrl钝荡、Alt、Shift舶衬、Meta 這樣無值的鍵埠通,這個(gè)事件不會(huì)觸發(fā)。對(duì)于有值的鍵逛犹,按下時(shí)先觸發(fā)keydown事件端辱,再觸發(fā)這個(gè)事件。
  • keyup:松開鍵盤時(shí)觸發(fā)該事件虽画。

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

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

KeyboardEvent 接口概述

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

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

new KeyboardEvent(type, options)

KeyboardEvent構(gòu)造函數(shù)接受兩個(gè)參數(shù)柴梆。第一個(gè)參數(shù)是字符串陨溅,表示事件類型;第二個(gè)參數(shù)是一個(gè)事件配置對(duì)象绍在,該參數(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.metaKey.ctrlKey,KeyboardEvent.metaKey胜茧,KeyboardEvent.shiftKey

以下屬性都是只讀屬性粘优,返回一個(gè)布爾值,表示是否按下對(duì)應(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:返回digital0 - digital9
  • 字母鍵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è)符號(hào)鍵撑教,則返回符號(hào)鍵的鍵名。比如醉拓,按下Ctrl + a伟姐,則返回a;按下Shift + a亿卤,則返回大寫的A愤兵。

如果無法識(shí)別鍵名,返回字符串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è)鍵嘶摊,即瀏覽器會(huì)持續(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沥匈、AltMeta里面忘渔,同時(shí)按下任意兩個(gè)或兩個(gè)以上的鍵就返回高帖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市畦粮,隨后出現(xiàn)的幾起案子散址,更是在濱河造成了極大的恐慌,老刑警劉巖宣赔,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件预麸,死亡現(xiàn)場離奇詭異,居然都是意外死亡儒将,警方通過查閱死者的電腦和手機(jī)吏祸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钩蚊,“玉大人犁罩,你說我怎么就攤上這事×骄危” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵含滴,是天一觀的道長诱渤。 經(jīng)常有香客問我,道長谈况,這世上最難降的妖魔是什么勺美? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任巫玻,我火速辦了婚禮鼎姐,結(jié)果婚禮上屋灌,老公的妹妹穿的比我還像新娘扒最。我一直安慰自己阁谆,他們只是感情好寄疏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布涣觉。 她就那樣靜靜地躺著尝蠕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪华蜒。 梳的紋絲不亂的頭發(fā)上辙纬,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音叭喜,去河邊找鬼贺拣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捂蕴,可吹牛的內(nèi)容都是我干的譬涡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啥辨,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼涡匀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起委可,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤渊跋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后着倾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拾酝,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年卡者,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒿囤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崇决,死狀恐怖材诽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恒傻,我是刑警寧澤脸侥,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盈厘,受9級(jí)特大地震影響睁枕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沸手,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一外遇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧契吉,春花似錦跳仿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妄辩。三九已至,卻和暖如春谨究,著一層夾襖步出監(jiān)牢的瞬間恩袱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工胶哲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留畔塔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓鸯屿,卻偏偏與公主長得像澈吨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寄摆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的婶恼。 ??事件桑阶,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評(píng)論 1 11
  • Eclipse常用快捷鍵 1幾個(gè)最重要的快捷鍵 代碼助手:Ctrl+Space(簡體中文操作系統(tǒng)是Alt+/)快速...
    山不轉(zhuǎn)人自轉(zhuǎn)閱讀 1,449評(píng)論 0 10
  • 本節(jié)介紹各種常見的瀏覽器事件。 鼠標(biāo)事件 鼠標(biāo)事件指與鼠標(biāo)相關(guān)的事件勾邦,主要有以下一些蚣录。 click 事件,dblc...
    許先生__閱讀 2,437評(píng)論 0 4
  • JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的眷篇。事件萎河,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特定的交互瞬...
    LemonnYan閱讀 679評(píng)論 0 4
  • 看到銀宇之光知道他就是張亞鋒老師的藝名,就光看到這個(gè)名字就感覺充滿正能量的磁場充滿陽光蕉饼,而且把《祖國頌》這首歌放在...
    980f72720dc7閱讀 167評(píng)論 0 2