• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > vue实现一个获取按键展示快捷键效果的Input组件

vue实现一个获取按键展示快捷键效果的Input组件

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了vue实现,获取按键,快捷键效果,Input组件等相关知识,希望对您有所帮助

这篇文章主要介绍了vue如何实现一个获取按键展示快捷键效果的Input组件,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下

遇到一个需求,页面内要自定义快捷键,这就需要可以有地方设置和展示快捷键,找了一圈Element UI发现没有能稍微改改就能用的组件,所以自己动手写了一个。
这个只有快捷键展示功能,快捷键实际绑定生效的话是依赖传回的快捷键数据,由另外的组件处理的。目前只测试了Chrome的环境。

效果如下:


60028f5da90de.gif


关键点

虽然看起来像是一个Input但在组件内实际上是展示一个标签效果,还需要有删除按钮。这就得在输入框内放下html代码,浏览器的Input组件显然不适合,这就只能自己仿一个类Input组件效果了。

focus、blur、选中高亮效果

非Input这类组件是没有focus、blur、选中高亮效果这些效果的,还好浏览器有预留实现方式,网上也早已有网友提供方案,在div里加上tabindex="0"属性,就能让div获得这些效果。

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

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

.shortcut-key-input {    cursor: text;    transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.shortcut-key-input:focus {    border-color: #188cff;    box-shadow: 0 0 4px rgba(24, 140, 255, 0.38);}

文本提示

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

光标闪动效果

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

@keyframes Blink {    0% { opacity: 0; }    100% { opacity: 1; }}.shortcut-key-input.cursor::after {    content: "|";    animation: Blink 1.2s ease 0s infinite;    font-size: 18px;    position: absolute;    top: 1px;    left: 8px;}

按键捕获

按键捕获主要靠keydown事件,其中传回的event里会标记是否按下alt、ctrl(control)等信息,所以做组合按键依赖此信息就可以实现。

因为每次按键都会触发事件,所以要屏蔽掉功能键的事件。代码只实现了一个非功能键的组合,需要多功能键可以另外建立变量判断连续按键的情况然后处理。

handleKeydown(e) {    const { altKey, ctrlKey, shiftKey, key, code } = e;    if (!CODE_CONTROL.includes(key)) {        if (!this.keyRange.includes(code)) return;        let controlKey = "";        [            { key: altKey, text: "Alt" },            { key: ctrlKey, text: "Ctrl" },            { key: shiftKey, text: "Shift" }        ].forEach(curKey => {            if (curKey.key) {                if (controlKey) controlKey += "+";                    controlKey += curKey.text;                }            });            if (key) {                if (controlKey) controlKey += "+";                controlKey += key.toUpperCase();            }            this.addHotkey({ text: controlKey, controlKey: { altKey, ctrlKey, shiftKey, key, code } });        }    e.preventDefault();},

CODE_CONTROL是另外预设的按键code码集合,方便处理。本来用的是keyCode的,但keyCode已经被废弃了,推荐的是code。

addHotkey就是添加到相应变量的函数,其中主要出判断一下是否有重复的快捷键。

然后预留了一个外部验证的接口,为了多快捷键的时候可以判断是否有重复。

还有一个max接口,可以限制每个组件的快捷键个数。

addHotkey(data) {    if (this.list.length && this.list.some(item => data.text === item.text)) return;    if (this.list.length && this.list.length.toString() === this.max.toString()) return;    if (!this.verify(data)) return;    this.list.push(data);}

在线预览:https://codesandbox.io/s/vue-hotkeyinput-90m2k

以上就是vue实现一个获取按键展示快捷键效果的Input组件的详细内容,更多关于vue 展示快捷键的资料请关注站长图库其它相关文章!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • vue实现一个获取按键展示快捷键效果的Input组件

相关文章

  • 2022-04-29浅谈小程序怎么实现列表滚动上下联动效果
  • 2022-04-29浅析小程序中怎么让scroll-view按照指定位置滚动
  • 2022-04-29Photoshop设计炫丽的抽象光线背景教程
  • 2022-04-29PhotoShop打造超具想象力的3D生态系统海报制作过程
  • 2022-04-29PHP怎么实现评论回复功能
  • 2022-04-29三种在php程序中嵌入html代码的方法
  • 2022-04-29详解php中的str_replace()(附代码实例)
  • 2022-04-29PHP实现长轮询消息实时推送功能代码实例讲解
  • 2022-04-29宝塔面板删除网站根目录后自动重建的解决办法
  • 2022-04-29百度与谷歌在SEO表现上的差别

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • 浅谈Nodejs中的callback回调
    • 如何在PHP中获取数组单元数量
    • 实例详解之怎样使用css实现3D穿梭效果
    • Photoshop绘制时尚大气的播放界面
    • Photoshop结合C4D制作三维立体艺术字
    • WordPress给新文章增加new标志方法总汇
    • PHP结合AJAX实现搜索提示功能
    • dedecms栏目30个关键字限制解决方法
    • Javascript智能识别收货地址插件,智能识别收货地址Pro
    • Linux下使用NTFS文件系统(Linux挂载NTFS数据盘)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有