react实现设置组合快捷键

news/2025/2/11 23:54:47/

分析下设置快捷键:
1.首先组合快捷键第一个必须为功能键(shift、ctrl、alt)且最后一个键不能为功能键,
2.组合键的键数大于1(shift+V),小于等于4(ctrl+shift+alt+A)
3.当出现功能键+普通键+功能键时(如shift+A+alt)时,应替换为功能键+功能键+(shift+alt+),就是功能键必须相连,不相连最后一个功能键把普通键替换掉,
4.当出现不符合规则的组合时需要变回未改变时的状态

state = {oldKey: 'CTRL+F12',newKey: 'CTRL+F12'}<Input onKeyDown={this.onKeyDown} onKeyUp={this.onKeyUp} value={this.state.newKey}/>

总的来说就是实现一个react的双向绑定。让input的值与state中的newKey绑定起来,当然这要结合两个事件onKeyDown事件和onKeyUp事件。

functionKey=['Ctrl', 'Shift', 'Alt'];
functionKeyCode=[16, 17, 18];
keyCombin = [];
functionKeyExist=(v)=>{ //检测是否含有功能键return this.functionKey.indexOf(v) !== -1
}
functionKeySelect = (v) => {// 当前是否选中了特殊键return this.keyCombin.indexOf(v) !== -1}lastKey = () => {// 最后一位是否是特殊键const v = this.keyCombin[this.keyCombin.length - 1] return this.functionKeyExist(v);}onlyAlt = () => {//是否只含有alt一个功能键if ((this.functionKeyExist.indexOf('Alt') !== -1) && (this.functionKeyExist.indexOf('Ctrl') === -1) && (this.functionKeyExist.indexOf('Shift') === -1)) {this.setState({newKey: 'alt+f12'})}}onCheck = (v: string) => {if (this.functionKeySelect(v)) { // 特殊键存在了什么也不做} else { // 不存在就追加 但是最后一个不能是特殊键const b = this.lastKey ()// 如果最后一位是特殊键 追加if (b) {this.keyCombin.push(v);this.setState({shortCut: this.keyCombin.join('+')})} else {// 如果不是 替换this.keyCombin.pop();this.keyCombin.push(v);this.setState({shortCut: this.keyCombin.join('+')})}}}onKeyUp = () => {this.onlyAlt()if (this.lastKey()) {this.setState({newKey: 'alt+f12'})}if (this.keyCombin.length === 1) {this.setState({newKey: 'alt+f12'})}this.keyCombin = []}onKeyDown = (e) => {if (e.ctrlKey || e.shiftKey || e.altKey) {e.ctrlKey &&  this.onCheck('Ctrl') e.shiftKey &&  this.onCheck('Shift') e.altKey &&  this.onCheck('Alt') }this.functionKeyCode.indexOf(e.keyCode) === -1  &&   this.onCheck(String.fromCharCode(e.keyCode))}

功能就是这样,这是带我的师傅写的,功能齐全,方法简单。我自己写了一天用的方法还特别复杂,还有一点小bug,差距是真的大,非常感激带我的师傅,对我十分照顾。不知道什么时候我也能像他一样强。


http://www.ppmy.cn/news/405520.html

相关文章

vue自定义热键、自定义快捷键组合,vue阻止默认事件

需求&#xff1a; 思路&#xff1a; 1、通过监听window.addEventListener&#xff0c;键盘事件KeyDown&#xff0c;获取按下的键的keyCode 2、按下什么键就把什么键的keyCode存起来&#xff0c;当存起来的keyCode符合你自定义的热键组合时&#xff0c;就触发自定义方法 注意…

Premiere快捷键设置

快捷键 编辑 → 快捷键&#xff1a; 添加编辑到所有轨道&#xff1a;V标记剪辑&#xff1a;R提取&#xff1a;T 编辑 → 首选项&#xff1a; 时间轴 【页面滚动】改为【平滑滚动】视频过渡默认持续时间改为 15 帧 音频 取消勾选【搜索时播放音频】 支持.webm 安装 WebM插…

设置快捷键使页面全屏

今天做的前台页面需要将整个网页部分通过快捷键将之实现全屏显示&#xff0c;在做的过程中通过查找资料&#xff0c;得到解决。 第一&#xff1a;在谷歌、猎豹、搜狗浏览器中显示全屏只需在<body>标签中添加以下内容 οnkeydοwn"if(window.event.keyCode81){full…

sublime 配置快捷键

​​​​​​ CtrlD 选中光标所占的文本&#xff0c;继续操作则会选中下一个相同的文本。AltF3 选中文本按下快捷键&#xff0c;即可一次性选择全部的相同文本进行同时编辑。举个栗子&#xff1a;快速选中并更改所有相同的变量名、函数名等。CtrlL 选中整行&#xff0c;继续操…

IntelliJ IDEA 设置快捷键(Keymap)

本专栏参考尚硅谷idea教程视频&#xff0c;笔记出自视频&#xff0c;稍微加入了少量个人理解 1. 设置快捷为 Eclipse 的快捷键 2.通过快捷键功能修改快捷键设置 3.通过指定快捷键&#xff0c;查看或修改其功能 4.导入已有的设置 点击 0K 之后&#xff0c;重启 IDEA 即可…

苹果计算机快捷键设置,苹果电脑怎么改快捷键

在系统设置--硬件--键盘中可以查看和设置一切系统当前所设定的快捷键组合。 Macbook的键盘布局中没有独立的Home/End/PageUp/PageDown四个键,用Fn+方向键替代: Fn + Left Home Fn + Right En Fn + Up PageUp Fn + Down PageDown Macbook的键盘布局中也只有Delete,而没有独立…

linux下 VSCode快捷键

文章目录 一、常用二、全部1、常规2、基本编辑3、rich languages editing4、多光标和选择5、显示6、搜索与替换7、导航8、编辑页面管理9、文件管理10、终端 一、常用 命令作用Ctrl,用户设置Alt↑/↓将当前行上移或下移CtrlShiftK删除行CtrlShift\跳至相匹配的括号处CtrlShift[…

Eclipse 快捷键设置

Eclipse 快捷键 15 个 Eclipse 常用开发快捷键使用技巧 1、alt? 或 alt/&#xff1a;自动补全代码或者提示代码 2、ctrlo&#xff1a;快速outline视图 3、ctrlshiftr&#xff1a;打开资源列表 4、ctrlshiftf&#xff1a;格式化代码 5、ctrle&#xff1a;快速转换编辑器 …