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 相关文章推荐
js下用gb2312编码解码实现方法
Dec 31 Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
Jun 30 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
纯jQuery实现前端分页功能
Mar 23 jQuery
将Sublime Text 3 添加到右键中的简单方法
Dec 12 Javascript
原生JS写Ajax的请求函数功能
Dec 22 Javascript
vue中锚点的三种方法
Jul 06 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
Feb 27 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 Javascript
基于elementUI竖向表格、和并列的案例
Oct 26 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
js实现点击添加一个input节点
2014/12/05 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
javascript求日期差的方法
2016/03/02 Javascript
关于backbone url请求中参数带有中文存入数据库是乱码的快速解决办法
2016/06/13 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python 中 list 的各项操作技巧
2017/04/13 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
python 重命名轴索引的方法
2018/11/10 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
python字符串反转的四种方法详解
2019/12/02 Python
Python实现图片识别加翻译功能
2019/12/26 Python
如何理解Python中包的引入
2020/05/29 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
科技之星事迹材料
2014/06/02 职场文书
村干部任职承诺书
2015/01/21 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
python中subplot大小的设置步骤
2021/06/28 Python