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 相关文章推荐
图片onload事件触发问题解决方法
Jul 31 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
Jun 14 Javascript
Javascript Throttle &amp; Debounce应用介绍
Mar 19 Javascript
JS操作CSS随机改变网页背景实现思路
Mar 10 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
jQuery中的编程范式详解
Dec 15 Javascript
Javascript实现div层渐隐效果的方法
May 30 Javascript
基于jQuery实现美观且实用的倒计时实例代码
Dec 30 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 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 getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
微信小程序实现图片懒加载的示例代码
2017/12/13 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python 读取.nii格式图像实例
2020/07/01 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
COS美国官网:知名服装品牌
2019/04/08 全球购物
实习生自荐信范文
2013/11/13 职场文书
小学门卫岗位职责
2013/12/17 职场文书
好人好事事迹材料
2014/02/12 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python