实际应用中,我们会遇到监听按键输入和鼠标点击事件,在这里我们进行对鼠标和键盘事件的总结.

Keyboard​Event

KeyboardEvent 对象描述了键盘的交互方式。 每个事件都描述了一个按键(Each event describes a key);事件类型keydown, keypress 与 keyup 可以确定是哪种事件在活动。
KeyboardEvent 表示刚刚发生在按键上的事情。 当你需要处理文本输入的时候,使用 HTML5 input 事件代替。例如,用户使用手持系统如平板电脑输入时, 按键事件可能不会触发。

方法

本接口同样会继承对象父代的方法, UIEvent 和 Event。

  • KeyboardEvent.getModifierState()返回一个 Boolean,表示在事件创建时,修改键如Alt , Shift, Ctrl, Meta等是否按下。
  • KeyboardEvent.initKeyEvent()初始化一个 KeyboardEvent 对象。 现在的标准方式是使用 KeyboardEvent() 构造器。
  • KeyboardEvent.initKeyboardEvent() 初始化一个 KeyboardEvent 对象。 现在的标准方式是使用 KeyboardEvent() 构造器。

介绍下我们常用的一些属性:

  • KeyboardEvent.key
  • KeyboardEvent.code
  • KeyboardEvent.ctrlKey
  • KeyboardEvent.shiftKey
  • KeyboardEvent.altKey
  • KeyboardEvent.metaKey

KeyboardEvent.ctrlKey | shiftKey | altKey | metaKey 比较简单,表示当你按下键盘的时候,Ctrl | Shift | Alt | meta 按键是否已经被按下。如果已经被按下这些值就是 true,通常我们要运用组合键的判断会用到(譬如:Alt + a)。大家看到 meta 会疑惑这个是哪个键?在 Mac 平台上指的是 command 键(⌘),而在 Windows 平台指的是 windows 键(⊞)。但是不是所有 Windows 电脑键盘都有 ⊞ 这个键的。接下来我们介绍下最重要的两个属性 key 和 code。

KeyboardEvent.key

如果你按下的按钮所代表的是一个可打印的字符(printed representation),那么这个 key 的值就是这个字符(譬如:a、Enter、Shift、CapsLock、Backspace)。。

KeyboardEvent.code

这个值比较诡异,它表示你按了键盘上的哪个按键。你按 acode 的值是 KeyA,你按左边的 Shiftcode 的值是 ShiftLeft。什么意思呢?就是他表示你按的按键在键盘的哪个位置。这里就有趣了,因为不同语言的键盘同一个键代表的字符可能不同,但是位置是相同的。打个比方:KeyQ 代表的是我们普通键盘q按键。但是呢 Dvorak 键盘q这个位置的按钮代表的不是 q,而是'。所以如果你按同一个按钮,key 的值可能不同,code 的值会相同。

KeyboardEvent.keyCode 只读

返回一个表示系统和实现相关的数字代码的 Number, 用于标识按键的未修改值。
了解了上面属性,我们就可以进行使用代码的方式实时获取输入的键值

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>键盘事件监听</title><style>* {margin: 0;padding: 0;}#container {display: flex;flex-direction: row;justify-content: center;align-items: center;padding-top: 20px;}table,table tr th,table tr td {border: 1px solid #000;}table {min-height: 25px;line-height: 25px;text-align: center;border-collapse: collapse;padding: 2px;}th {width: 150px;}</style><script type="text/javascript" language=JavaScript>window.onload = function () {const key = document.getElementById('key');const keyCode = document.getElementById('keyCode');const code = document.getElementById('code');const ctrlKey = document.getElementById('ctrlKey');const metaKey = document.getElementById('metaKey');const shiftKey = document.getElementById('shiftKey');const altKey = document.getElementById('altKey');const combineKey = document.getElementById('combineKey');document.onkeydown = function(event) {var e = event || window.event || arguments.callee.caller.arguments[0];e.preventDefault();  //阻止默认事件// 设置获取的值key.innerHTML = e.key;keyCode.innerHTML = e.keyCode;code.innerHTML = e.code;ctrlKey.innerHTML = e.ctrlKey;metaKey.innerHTML = e.metaKey;shiftKey.innerHTML = e.shiftKey;altKey.innerHTML = e.altKey;if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey) {let result = '';if (e.altKey) {result = 'Alt';} else if (e.shiftKey) {result = 'Shift';} else if (e.metaKey) {result = 'Meta';} else if (e.ctrlKey) {result = 'Control';}combineKey.innerHTML = result !== e.key ? `${result} + ${e.key}` : `${result}`;}  else {combineKey.innerHTML = '-';}};}</script>
</head>
<body>
<div id="container"><table border="0px"><tr><th>key</th><th>keyCode</th><th>code</th><th>ctrlKey</th><th>metaKey</th><th>shiftKey</th><th>altKey</th><th>组合健</th></tr><tr><td id="key">-</td><td id="keyCode">-</td><td id="code">-</td><td id="ctrlKey">-</td><td id="metaKey">-</td><td id="shiftKey">-</td><td id="altKey">-</td><td id="combineKey">-</td></tr></table><hr />
</div>
</body>
</html>

显示结果如下:

当我们在键盘上输入键值时,会有相应的属性显示,也可以点击该链接实时尝试:

See the Pen keyboardEvent by suwu150 ( @suwu150) on CodePen.

Mouse​Event​

从上面我们了解到了键盘事件的监听,在这里我们继续学习鼠标事件的监听:
MouseEvent 接口指用户与指针设备( 如鼠标 )交互时发生的事件。使用此接口的常见事件包括:click,dblclick,mouseup,mousedown。

介绍下我们常用的一些属性:

  • MouseEvent.altKey 只读,当鼠标事件触发的时,如果alt 键被按下,返回true;
  • MouseEvent.button 只读,当鼠标事件触发的时,如果鼠标按钮被按下(如果有的话),将会返回一个数值。这些数值代表的意义分别是,button=0(鼠标左键),button=2(鼠标右键),button=1(鼠标中间键)
  • MouseEvent.buttons 只读,当鼠标事件触发的时,如果多个鼠标按钮被按下(如果有的话),将会返回一个或者多个代表鼠标按钮的数字。这些数值代表的意义分别是,buttons=1(鼠标左键),buttons=2(鼠标右键),buttons=3(同时按下左健和右键),buttons=4(鼠标中间键),buttons=5(同时按下左健和中间键),buttons=6(同时按下中间健和右键),buttons=7(同时按下左健、右键和中间键).
  • MouseEvent.clientX 只读,鼠标指针在点击元素(DOM)中的X坐标。
  • MouseEvent.clientY 只读,鼠标指针在点击元素(DOM)中的Y坐标。
  • MouseEvent.ctrlKey 只读,当鼠标事件触发时,如果 control 键被按下,则返回 true;
  • MouseEvent.metaKey 只读,当鼠标事件触发时,如果 meta键被按下,则返回 true;
  • MouseEvent.shiftKey 只读当鼠标事件触发时,如果 shift 键被按下,则返回 true;
  • MouseEvent.which 只读,当鼠标事件触发时,表示被按下的按钮。

同样的,我们使用代码进行获取鼠标点击时触发的值

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>键盘事件监听</title><style>* {margin: 0;padding: 0;}#container {display: flex;flex-direction: row;justify-content: center;align-items: center;padding-top: 20px;}table,table tr th,table tr td {border: 1px solid #000;}table {min-height: 25px;line-height: 25px;text-align: center;border-collapse: collapse;padding: 2px;}th {width: 130px;}</style><script type="text/javascript" language=JavaScript>function doNothing(){window.event.returnValue=false;return false;}window.onload = function () {const button = document.getElementById('button');const buttons = document.getElementById('buttons');const clientX = document.getElementById('clientX');const clientY = document.getElementById('clientY');const ctrlKey = document.getElementById('ctrlKey');const metaKey = document.getElementById('metaKey');const shiftKey = document.getElementById('shiftKey');const altKey = document.getElementById('altKey');const which = document.getElementById('which');const combineKey = document.getElementById('combineKey');document.onmousedown = function(event) {var e = event || window.event || arguments.callee.caller.arguments[0];e.preventDefault();  //阻止默认事件// 设置获取的值button.innerHTML = e.button;buttons.innerHTML = e.buttons;clientX.innerHTML = e.clientX;clientY.innerHTML = e.clientY;ctrlKey.innerHTML = e.ctrlKey;metaKey.innerHTML = e.metaKey;shiftKey.innerHTML = e.shiftKey;altKey.innerHTML = e.altKey;which.innerHTML = e.which;function getButton(value) {let buttonname = '';if (value === 0) buttonname = '鼠标左键';if (value === 1) buttonname = '鼠标中间键';if (value === 2) buttonname = '鼠标右键';return buttonname;}if (e.altKey || e.shiftKey || e.metaKey || e.ctrlKey) {let result = '';if (e.altKey) {result = 'Alt';} else if (e.shiftKey) {result = 'Shift';} else if (e.metaKey) {result = 'Meta';} else if (e.ctrlKey) {result = 'Control';}combineKey.innerHTML = `${result} + ${getButton(e.button)}`;}  else {combineKey.innerHTML = getButton(e.button);}};}</script>
</head>
<body oncontextmenu="doNothing()">
<div id="container"><table border="0px"><tr><th>button</th><th>buttons</th><th>clientX</th><th>clientY</th><th>ctrlKey</th><th>metaKey</th><th>shiftKey</th><th>altKey</th><th>which</th><th>组合健</th></tr><tr><td id="button">-</td><td id="buttons">-</td><td id="clientX">-</td><td id="clientY">-</td><td id="ctrlKey">-</td><td id="metaKey">-</td><td id="shiftKey">-</td><td id="altKey">-</td><td id="which">-</td><td id="combineKey">-</td></tr></table><hr />
</div>
</body>
</html>

效果如下:


可参见以下链接进行操作:

See the Pen MouseEvent by suwu150 ( @suwu150) on CodePen.

常见键值

字母和数字键的键码值(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
数字键盘上的键的键码值(keyCode) 功能键键码值(keyCode)
按键 键码 按键 键码 按键 键码 按键 键码
0 96 8 104 F1 112 F7 118
1 97 9 105 F2 113 F8 119
2 98 * 106 F3 114 F9 120
3 99 + 107 F4 115 F10 121
4 100 Enter 108 F5 116 F11 122
5 101 - 109 F6 117 F12 123
6 102 . 110
7 103 / 111
控制键键码值(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
音量减 174
停止 179
静音 173
浏览器 172
邮件 180
搜索 170
收藏 171

参考链接:

1.https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent
2.https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/ctrlKey

JavaScript键盘鼠标监听功能相关推荐

  1. Python 键盘鼠标监听

    异想天开的想记录一下自己每天的键盘键位走向,于是就在网上搜索了一下相关的实现,然后就发现了一个第三方的库pyHook.封装的很好,我们只需要傻瓜式的调用里面的API就可以了. 下面是我在使用pyHoo ...

  2. Python 技术篇-pyhook暂停键盘鼠标监听事件,停止键盘鼠标监听事件且不关闭程序

    很多时候只是要暂停一下或只想关闭监听,并不想把程序关闭. 但是网上搜了半天,没有找到,然后自己就去翻了翻源码,发现了. 开启监听是: HookMouse()和HookKeyboard() 暂停监听是: ...

  3. AWT—鼠标监听,窗口监听,键盘监听

    AWT-鼠标监听,窗口监听,键盘监听 鼠标监听 目的:实现鼠标作画 package com.deng.lesson03; ​ import java.awt.*; import java.awt.ev ...

  4. Java_基础—GUI(窗体/鼠标/键盘/动作监听和键盘事件)

    一.窗体监听 Frame f = new Frame("我的窗体"); //事件源是窗体,把监听器注册到事件源上 //事件对象传递给监听器 package com.soar.gui ...

  5. jquery实现上下左右键盘监听_基于 jQuery 实现键盘事件监听控件

    最近项目里要做一个画板,需要对键盘事件进行监听,来进行诸如撤回.重做.移动.缩放等操作,因此顺手实现了一个键盘事件监听控件,期间略有收获,整理出来,希望对大家有所帮助,更希望能获得高手的指点. 1. ...

  6. 对EditText的软键盘进行监听-----android:imeOptions

    在android发开过程中,有时候需要对EditText的软键盘进行监听. 当点击软键盘回车位置按键的时候,需要实现 完成.前进.下一项.搜索.发送或其他功能,这就需要开发者对软键盘回车的点击事件进行 ...

  7. 键盘事件监听_键盘事件

    键盘事件监听 There are 3 types of events when interacting with keyboard events: 与键盘事件进行交互时,有3种类型的事件: keydo ...

  8. ROS中 Python/C++ 键盘按键监听事件

    ROS中 Python/C++ 键盘按键监听事件 这几天在肝全国智能驾驶大赛,真就挺累的:抓狂思考,手搓代码,疯狂编译,要命运行.在这趟火车上,被各种各样的问题卡住甚至卡死,就很难受好吧.至今,我深深 ...

  9. java图形界面设计 swing之JTable表格的创建使用-添加鼠标监听

    最近用java设计了一个桌面管理系统, 在数据展示模块的时候遇到了一点问题,找不到好的展示方式 最后发现了JTable这个类, 主要涉及这个类的构造与使用 注意:JTable都需要在JScrollPa ...

  10. Android监听作用,Android开发之CheckBox的简单使用与监听功能示例

    本文实例讲述了Android开发之CheckBox的简单使用与监听功能.分享给大家供大家参考,具体如下: activity_main.xml android:layout_width="ma ...

最新文章

  1. java软件网络工程师面试题_170道Java工程师面试题,你敢挑战吗?
  2. java接口fastjson_走进Java接口测试之fastjson指南
  3. HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)
  4. html可视化布局工具_简介一些蜘蛛布局标签的饼图的绘制方法
  5. 互联网分层架构的本质
  6. redis应用之——获取若干最新注册用户
  7. 推荐系统中所需的概率论与数理统计知识
  8. Atitit ati teck trend技术趋势资料包 C:\onedriver\OneDrive\Documents\0 it impttech topic\ati teck trend技术趋
  9. 将华为路由器做成ftp服务器(实现上传下载功能)
  10. 程序员是一群什么样的人,1024程序员节调查报告」这群IT人有点东西哟
  11. 使用Python获取股票的基金持仓数据
  12. 感冒发烧不宜吃的食物与可以吃的食物
  13. 微信支付分开通了!对飙芝麻信用分!开通与查看攻略!
  14. 分享知识-快乐自己:oracle12c创建用户提示ORA-65096:公用用户名或角色无效
  15. 为你的程序创建一个控制台
  16. Android 游戏设计教程:游戏元素和工具
  17. php 购买车票,jQuery实现买火车票城市选择切换功能
  18. 【学习笔记】GPS测量与数据处理(观测值的线性组合(单差、双差、三差))
  19. python 对角阵_python-Numpy分区对角矩阵
  20. vs下载“无法下载安装文件,请连接Internet连接,然后重试”

热门文章

  1. android 支付宝 6002,IOS支付宝支付出现6002问题的解决办法
  2. QPSK、16QAM、64QAM信号的散点图、正交、同相分量波形图
  3. RBF神经网络-高斯核函数
  4. 通过java把cad的dwg文件转换为svg文件
  5. 三维空间点到线段的距离
  6. 在线计算机辅助翻译软件,科学网—计算机辅助翻译软件OmegaT - 李继存的博文
  7. 物联网智能垃圾回收源码 智慧分类回收源码 物联网应用
  8. 中国环氧树脂行业运营模式与营销创新策略分析报告2021-2027年版
  9. 中国装配式模块化建筑(PPVC)行业发展趋势前瞻与十四五战略规划研究报告2022年版
  10. 点到直线的距离直线的交点及夹角