JavaScript监听键盘事件代码实现


Posted in Javascript onJune 03, 2020

在写网页的时候,常常需要监听键盘事件,让我们来看看如何实现吧。

监听方式

键盘事件往往是全局监听,设监听的函数为keyboard()。

keyup事件类型。该类型触发条件为按键按下去并松开。

//长按并松开只触发一次
document.addEventListener('keyup', keyboard);
document.onkeyup = keyboard; //记得不要加括号!

keydown事件类型。该类型触发条件为按键按下去。

//长按可以触发多次
document.addEventListener('keydown', keyboard);
document.onkeydown = keyboard;

keypress事件类型。该类型触发条件为按键按下去且产生了字符。

//长按可以触发多次
//遇到'1','a',回车等按键可以触发,但del键,向上键等则不会
document.addEventListener('keypress', keyboard);
document.onkeypress = keyboard;

需要注意的是:keypress的兼容性并不是很好,比如安卓系统就不支持,所以尽量避免使用。
onkey___ 和 addEventListener之间,最好选后者。

另外,如果keyboard不带参,则监听的事件是任何符合条件的按键,即只要你按了键盘,就会触发事件。

监听具体事件(即按了哪个键)

上文提到的keyboard函数是可以设形参的,且在调用的时候不需加实参。

function keyboard(eve) {
...
}
document.onkeyup = keyboard; //不需要加参数和括号

此时的eve便是键盘事件类型的变量,它有以下属性:

属性 意义
key 事件对应按钮的字符
keyCode 事件对应按钮的Unicode码
which 事件对应按钮的Unicode码

其中,不同的浏览器对keyCode和which的支持情况是不同的,下文会有关于提升兼容性的方法。

举个例子:

<p id="msg1"></p>
<p id="msg2"></p>

<script>
	function keyboard(eve) {
		msg1.textContent += eve.key;
		msg2.textContent += eve.keyCode || eve.which;
 		//该方法可以提升代码的兼容性
	}
	document.onkeyup = keyboard;
</script>

input:
a

output:
a
65

需要注意的是:key属性的兼容性并不高,最好是先获取Unicode码,再转成对应字符。

let x = eve.keyCode || eve.which;
let key = String.fromCharCode(x);

想知道某个按键的Unicode码,可以查手册,也可以在控制台中试验。
简单点的可以用ASCII码来顶着 https://www.runoob.com/tags/html-ascii.html 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 写类方式之三
Jul 05 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
Jun 15 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
H5用户注册表单页 注册模态框!
Sep 17 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
vue代码分割的实现(codesplit)
Nov 13 Javascript
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
js简单遍历获取对象中的属性值的方法示例
Jun 19 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
JavaScript 接口原理与用法实例详解
May 12 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 #Javascript
深入分析jQuery.one() 函数
Jun 03 #jQuery
layui实现显示数据表格、搜索和修改功能示例
Jun 03 #Javascript
微信小程序文章详情功能完整实例
Jun 03 #Javascript
VueQuillEditor富文本上传图片(非base64)
Jun 03 #Javascript
微信小程序文章列表功能完整实例
Jun 03 #Javascript
Angular8 简单表单验证的实现示例
Jun 03 #Javascript
You might like
PHP代码优化技巧小结
2015/09/29 PHP
jQuery学习笔记之DOM对象和jQuery对象
2010/12/22 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
javascript实现动态标签云
2015/10/16 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
JavaScript动态检测密码强度原理及实现方法详解
2019/06/11 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
python机器学习之随机森林(七)
2018/03/26 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
详解如何设置Python环境变量?
2019/05/13 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
车间操作工岗位职责
2013/12/19 职场文书
八项规定整改方案
2014/02/21 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL