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.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
Nov 22 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
用console.table()调试javascript
Sep 04 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
JavaScript中的parse()方法使用简介
Jun 12 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
vue 之 .sync 修饰符示例详解
Apr 21 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
Jan 20 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中常见数据类型的汇总分享
2014/01/06 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
PHP页面实现定时跳转的方法
2014/10/31 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
Laravel 队列使用的实现
2019/01/08 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Python中splitlines()方法的使用简介
2015/05/20 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
python实现梯度下降法
2020/03/24 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
python开发一款翻译工具
2020/10/10 Python
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
信息部岗位职责
2013/11/12 职场文书
职工运动会邀请函
2014/01/19 职场文书
企业年会主持词
2014/03/27 职场文书
初中班主任寄语
2014/04/04 职场文书
防沙治沙典型材料
2014/05/07 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
聘任书范文大全
2015/09/21 职场文书
element多个表单校验的实现
2021/05/27 Javascript