hotkeys-js库实战记录 - 监听键盘按键(快捷键)

hotkeys-js 库,在npm上可搜索查找,作为自己项目里用来监听键盘快捷键,之前由领导负责的该功能模块,现闲来无事,看了下该库的文档,从头到尾跟着把所有API都测了一遍。


 特性概览:

  1. 监听键盘按键(快捷键)

  2. 默认情况下,INPUT SELECT TEXTAREA 元素不响应快捷键;如有需要则通过设置 hotkeys.filter 进行自定义 >>>  例如某元素某些情况下响应快捷键,某些情况下不响应;

  3. 绑定的按键不区分大小写;要区分则在按键的 KeyHandler 函数里处理;

  4. 可声明多个活动范围,然后可切换活动范围,从而实现不同场景下,对应的快捷键功能;也就是对不同场景的快捷键功能进行对应功能模块封装。

  5. 核心API: hotkeys; hotkeys.setScope; hotkeys.getScope(); hotkeys.deleteScope; hotkeys.trigger; hotkeys.unbind。hotkeys.filter估计很少场景需要,剩下其他5个API个人感觉基本上就用不上了,有兴趣的自行去人家文档里查看。
import hotkeys from 'hotkeys-js';function initHotkey() {hotkeys('b', {scope: 'demo'}, (event, handler) => {console.log('demo 按下');});hotkeys('q,b', {}, (event, handler) => {console.log('all按下');});hotkeys('S,b', {scope: 'canvas', // 设置按键所属活动范围(需要激活); 若参数 scope == false ,则默认值为'all',all是默认激活(active)。keydown: true, // 默认truekeyup: true, // 默认falsesplitKey: '-', // 默认值为'+' ,组合键连接符,例如原来按2个键触发xx则是s+b, splitKey声明为`-`后,则是s-b// capture: true, // 默认值为false, 就是 addEventListener 该函数的第三个参数;// element: document, // 默认值为 document , 就是给该 element 添加事件>  element.addEventListener}, (event, handler) => {// 声明了 scope 参数则必须 setScope 激活。// 第二个参数 类型为 string | object | function; 如果hotkeys()传入3个参数,第二个参数则必须是string | object 。// 为string时则是 scope 参数,需激活; 为object时,根据object内声明的参数进行对应处理; // 第二个参数为function则是按键触发时的回调函数; 如同第三个参数,也就是说第二个参数是函数,则不需要传入第三个参数;if (!event||!handler) {// trigger 用该API触发的回调函数,这两个值都是undefined;根据业务需求需要注意额外处理。return}event?.preventDefault()console.log(event, handler, '按下');// console.log(event.type); // keydown,keyup参数都为true的情况下,可根据该属性区分按键是按下还是弹起; 最好的方式感觉还是再用hotkeys()重新声明,调整keydown/up的值即可;// console.log(event.key); // 若要判断按键触发时的大小写问题,则通过该属性进行处理;});// hotkeys.setScope('canvas'); // 使用“setScope”方法设置当前活动范围; 除了“all”之外,只能有一个活动范围。默认情况下(可手动删除),“all”始终处于活动状态。// 注意!如果使用了setScope设置激活范围,则后续的 unbind 这些API 只会作用于该激活的范围!简单来说就是只会作用于 getScope() 返回的范围!hotkeys.setScope('canvas')console.log(hotkeys.getScope(), '获取当前激活的活动范围,若无则返回all,注意all永远是默认激活的,除非主动delete掉all!');// hotkeys.unbind('b', 'all'); // 指定某个活动范围取消绑定该按键// hotkeys.unbind('b'); // 取消绑定某个按键; 如果未指定作用域,则默认为当前作用域 getScope()// hotkeys.unbind(); // 解除所有活动范围的所有按键绑定!function del() {hotkeys.deleteScope('canvas')setTimeout(() => {hotkeys('b', {scope: 'canvas'}, (event, handler) => {console.log('重新注册的 canvas 按下');});hotkeys.setScope('canvas')}, 5000);}// hotkeys.deleteScope('all') // 删除活动范围// hotkeys.deleteScope('canvas') // 删除该活动范围,删除后,无法再设置setScope该活动范围 ! 想要使用则需要重新 hotkeys() 注册!// hotkeys.deleteScope('issues', 'newScopeName'); // 如果需要在删除后,激活新的活动范围则传入第二个参数(需激活的)即可。setTimeout(() => {console.log('代码里主动触发');hotkeys.trigger('b', 'canvas'); // 触发'canvas'活动的b按键事件;但事件回调里不会有event, handler 这2个参数!// hotkeys.trigger('b'); // 若不传入scope参数,则默认是触发all活动的按键!}, 3000);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现广义线性回归模型(statsmodels GLM算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model,简称GLM)是一种广泛应用于回归分析和分类问题的统…

[足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-数学基础Ch0-4线性时不变系统中的冲激响应与卷积 1. LIT System:Linear Time Invariant2. 卷积 Convolution3. 单位冲激 Unit Impulse——Dirac Delta 线性时不变系统 : L…

Science | 张锋实验室:聚类算法揭示188种新型CRISPR系统

微生物序列数据库包含大量有关酶和其他可用于生物技术的分子的信息。但近年来,这些数据库已经变得非常庞大,以至于很难有效地搜索到感兴趣的酶。 2023年11月23日,博德研究所张锋及美国国立卫生研究院Eugene V. Koonin共同通讯在Science 在线…

软件测试外包干了2个月,技术进步2年。。。

先说一下自己的情况,本科生,18年通过校招进入北京某软件公司,干了接近2年的功能测试,今年国庆,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

01_W5500简介

目录 W5500简介: 芯片特点: 全硬件TCPIP协议栈: 引脚分布: W5500简介: W5500是一款高性价比的以太网芯片,其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用&#xff…

【WPF】弹出一个弹窗并显示一个列表

要在WPF中弹出一个弹窗并显示一个列表&#xff0c;你可以使用Popup元素和一个包含列表的控件&#xff0c;如ListBox或ListView。下面是一个示例&#xff1a; <Grid><Button Content"打开弹窗" Click"Button_Click" /><Popup x:Name"P…

CasADi - 最优控制开源 Python/MATLAB 库

系列文章目录 文章目录 系列文章目录前言一、介绍1.1 CasADi 是什么&#xff1f;1.2 帮助与支持1.3 引用 CasADi1.4 阅读本文档 二、获取与安装三、符号框架3.1 符号 SX3.1.1 关于命名空间的说明3.1.2 C 用户注意事项 3.2 DM3.3 符号 MX3.4 SX 和 MX 混合使用3.5 稀疏类3.5.1 获…

Vue.delete

Vue.delete( target, propertyName/index ) 参数&#xff1a; {Object | Array} target {string | number} propertyName/index 如果要删除的是对象上的属性&#xff1a; 首先&#xff0c;Vue.delete会在内部调用Object.defineProperty方法&#xff0c;将要删除的属性的值设置…

Vue3中reactive和ref对比

Vue3中reactive和ref对比 数据角度对比原理角度对比使用角度对比 数据角度对比 ref用来定义: 基本类型reactive用来定义: 对象(或数组)类型数据备注:ref也可以定义对象或数组类型数据,它内部会调用reactive转为代理对象. 原理角度对比 ref通过Object.defineProperty()中的ge…

学习Python的未来前景分析

文章目录 前言学python可以干什么如果具备Python编程&#xff0c;能用Python做什么&#xff1a;学Python语言能干什么1.常规软件开发2.科学计算3.自动化运维4.云计算 学python编程对未来的影响关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Py…

外包干了3个月,技术倒退2年。。。

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Unity插件笔记之Bast Http插件

只有部分功能 // 获取本地IP地址 private string myIp; private void GetIP() {foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()){if (ni.NetworkInterfaceType NetworkInterfaceType.Wireless80211 || ni.NetworkInterfaceType NetworkInterf…

SAP 工序委外简介

在SAP系统中,外部加工分为工序委外和标准委外两种,对于工序委外,它存在于很多的模块中,在PP、PM、PS等模块中都有应用。 工序委外中字面理解就是在生产过程中,加工的某道工序需要外发给供应商进行加工,物权没有发生转变,只是支付给供应商相应是加工费用,实际加工成本最终…

matlab 最小二乘拟合空间直线(方法二)

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理

keil软件注释显示中文字符乱码的问题

打开Edit选项&#xff0c;设置Encoding为 UTF-8字符编码即可。

Linux防火墙命令(关闭,启动,添加指定服务/端口)

不同版本的linux所用命令不相同: 查看linux版本命令: cat /etc/redhat-release [rootmyYUn software]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 如果是centos7以上,用下面的命令第一行,如systemctl status firewalld.service 如果是centos6以下,用下面…

异常(C++)

异常 前言一、程序的错误分类二、异常1. 概念2. 捕获异常的关键字和格式3. 异常的使用异常的原则异常再抛出异常说明注意事项 4. 自定义异常体系5. C标准库的异常体系 三、总结 前言 在程序运行时经常碰到一些错误&#xff0c;例如年龄、身高不能为负&#xff0c;除数为0等&…

sql注入 [GXYCTF2019]BabySQli1

打开题目 多次尝试以后我们发现存在一个admin的账号&#xff0c;但是密码我们不知道 我们尝试一下万能密码 admin or 11 -- q 报错 我们尝试bp抓一下包看看 看着很像编码 先去base32解码 再base64解码 得到 我们从这个sql语句中得到注入点为name 根据报错信息我们知道是…

网络安全(一)--网络环境构成,系统的安全

2. 网络攻防环境 目标 了解攻防环境构成了解入侵检测系统&#xff08;平台&#xff09;的部署位置 2.1. 环境构成 2.1.1. 环境框图 一个基本的网络攻防实验环境包括&#xff1a;靶机、攻击机、入侵检测分析系统、网络连接四部分组成。 一个基础的网络攻防实验环境需要如下…

提取不重复的整数

输入一个 int 型整数&#xff0c;按照从右向左的阅读顺序&#xff0c;返回一个不含重复数字的新的整数。 保证输入的整数最后一位不是 0 。 输入&#xff1a;9876673 输出&#xff1a;37689 解题思路&#xff1a; 1、将输入的整数分别与10 相除&#xff0c;后得到的余数&…