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 设计模式学习 Factory
Jul 29 Javascript
jQuery弹性滑动导航菜单实现思路及代码
May 02 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
js获取图片宽高的方法
Nov 25 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
Nov 27 Javascript
解决node.js安装包失败的几种方法
Sep 02 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
angular4自定义组件详解
Sep 28 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
Dec 22 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
Ajax常用封装库——Axios的使用
May 08 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短网址和数字之间相互转换的方法
2015/03/13 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
Python 调用DLL操作抄表机
2009/01/12 Python
python使用多线程不断刷新网页的方法
2015/03/31 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
解决yum对python依赖版本问题
2019/07/05 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
python网络编程之五子棋游戏
2020/05/14 Python
Python新手学习装饰器
2020/06/04 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
农民工创业典型事迹
2014/01/25 职场文书
大学毕业自我评价
2014/02/02 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
小学生读书笔记范文
2015/06/30 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL