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 相关文章推荐
jquery cookie插件代码类
May 26 Javascript
jqPlot Option配置对象详解
Jul 25 Javascript
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
Mar 22 Javascript
jquery异步跨域访问代码
Jun 28 Javascript
Angular.js如何从PHP读取后台数据
Mar 24 Javascript
使用伪命名空间封装保护独自创建的对象方法
Aug 04 Javascript
jQuery简单倒计时效果完整示例
Sep 20 Javascript
Vue实现选择城市功能
May 27 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
基于Vue实现拖拽效果
Apr 27 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
微信小程序自定义顶部组件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/25 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
详解PHP中的8个魔术常量
2020/07/06 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python的标准模块包json详解
2017/03/13 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
python 递归相关知识总结
2021/03/03 Python
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
电脑教师的教学自我评价
2013/11/26 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android