利用vue怎么实现一个获取按键展示快捷键效果的输入组件

  介绍

利用vue怎么实现一个获取按键展示快捷键效果的输入组件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

焦点,模糊,选中高亮效果

非输入这类组件是没有焦点,模糊,选中高亮效果这些效果的,还好浏览器有预留实现方式,网上也早已有网友提供方案,在div里加上tabindex=?”;属性,就能让div获得这些效果。

tabindex属性规定了标签按键的顺序,0的写话是会按组件默认顺序被选中的,如果写1则始终无法被选中。因为本身是仿输入组件形式,能被标签获取也刚好很合理。

然后加上CSS的获取焦点的边框效果,鼠标移动到此显示文本类型指针

.shortcut-key-input  {   光标:大敌;文本;   ,转型:border-color  0.2 s  cubic-bezier (0.645, 0.045, 0.355,, 1);   }   .shortcut-key-input: focus  {   ,边框颜色:# 188 cff;   ,不必:0,0,4 px  rgba(24日,140年,255年,0.38);   }

文本提示

当没有内容时需要跟输入一样,可以默认显示文本提示。这也是放一个div在里面,用Vue控制,如果输出的标签变量有数据时,就不让此元素显示。

光标闪动效果

这个比较好处理,在类里输入面放一个伪元素,当获取焦点的时候添加此伪元素,然后再给此元素一个CSS3的动画,就有光标闪动的效果了。

@keyframes  Blink  {   ,0%{,不透明度:0;,}   ,100%{,不透明度:1;,}   }   .shortcut-key-input.cursor: after  {   ,内容:“|”;   动画:大敌;Blink  1.2 s  ease  0 s 无限;   ,字体大小:18 px;   ,位置:绝对;   ,:1 px;   左:大敌;8 px;   }

按键捕获

按键捕获主要靠keydown事件,其中传回的事件里会标记是否按下alt, ctrl(控制)等信息,所以做组合按键依赖此信息就可以实现。
因为每次按键都会触发事件,所以要屏蔽掉功能键的事件。代码只实现了一个非功能键的组合,需要多功能键可以另外建立变量判断连续按键的情况然后处理。

,, handleKeydown (e), {   ,,const  {altKey的不同之处是,ctrlKey, shiftKey,,钥匙,,code },=, e;   ,,if  (! CODE_CONTROL.includes(关键),{   ,,,if  (! this.keyRange.includes(代码),返回;   ,,,let  controlKey =,““   ,,,(   ,,,,{,关键:altKey,,文字:,“Alt",},   ,,,,{,关键:ctrlKey,,文字:,“Ctrl",},   ,,,,{,关键:shiftKey,,文字:,“Shift",}   ,,,].forEach (curKey =祝辞,{   ,,,,if  (curKey.key), {   ,,,,,if  (controlKey), controlKey  +=,“+”;   ,,,,,controlKey  +=, curKey.text;   ,,,,}   ,,,});   ,,,if (关键),{   ,,,,if  (controlKey), controlKey  +=,“+”;   ,,,,controlKey  +=, key.toUpperCase ();   ,,,}   ,,,this.addHotkey({,文字:controlKey,, controlKey:, {altKey的不同之处是,ctrlKey, shiftKey,,,, code },});   ,,}   ,,e.preventDefault ();   ,,},

CODE_CONTROL是另外预设的按键代码码集合,方便处理。本来用的是键码的,但键码已经被废弃了,推荐的是代码。
addHotkey就是添加到相应变量的函数,其中主要出判断一下是否有重复的快捷键。
然后预留了一个外部验证的接口,为了多快捷键的时候可以判断是否有重复。
还有一个马克斯接口,可以限制每个组件的快捷键个数。

,, addHotkey(数据),{   ,,if  (this.list.length ,,, this.list.some (item =祝辞,data.text ===, item.text)),返回;   ,,if  (this.list.length ,,, this.list.length.toString (),===, this.max.toString()),返回;   ,,if  (! this.verify(数据),返回;   ,,this.list.push(数据);   以前,,}

看完上述内容,你们掌握利用vue怎么实现一个获取按键展示快捷键效果的输入组件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

利用vue怎么实现一个获取按键展示快捷键效果的输入组件