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代码)
Oct 29 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
Jan 12 Javascript
Node.js和PHP根据ip获取地理位置的方法
Mar 14 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
Sep 08 Javascript
详解AngularJS 模块化
Jun 14 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
Nov 10 jQuery
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
详解如何探测小程序返回到webview页面
May 14 Javascript
微信小程序学习总结(五)常见问题实例小结
Jun 04 Javascript
Vue使用Proxy代理后仍无法生效的解决
Nov 13 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中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
jQuery实现获取元素索引值index的方法
2016/09/18 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
python try except 捕获所有异常的实例
2018/10/18 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
python实现整数的二进制循环移位
2019/03/08 Python
python离线安装外部依赖包的实现
2020/02/13 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
公司离职证明范本(5篇)
2014/09/17 职场文书
婚庆主持词大全
2015/06/30 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python