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 参考教程
Dec 29 Javascript
Jquery 点击按钮显示和隐藏层的代码
Jul 25 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
莱鸟介绍javascript onclick事件
Jan 06 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
Javascript 严格模式use strict详解
Sep 16 Javascript
js中的闭包学习心得
Feb 06 Javascript
快速处理vue渲染前的显示问题
Mar 05 Javascript
vue-cli配置全局sass、less变量的方法
Jun 06 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数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
Javascript函数的参数
2015/07/16 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python运算符重载用法实例
2015/05/28 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
Python模块常用四种安装方式
2020/10/20 Python
Python项目打包成二进制的方法
2020/12/30 Python
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
人力管理专业毕业生求职信
2014/02/27 职场文书
学期个人工作总结
2015/02/13 职场文书
2016年国培研修日志
2015/11/13 职场文书
话题作文之成长
2019/12/09 职场文书
redis中lua脚本使用教程
2021/11/01 Redis
Python 多线程处理任务实例
2021/11/07 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js