Vue项目给应用优雅的绑定快捷键

时间: 2020-07-10阅读: 46标签: 快捷键

想必各位前端看官也一定做过这样的需求,给我们的应用某些主要的功能绑定一个快捷键。尤其是工具类的产品,让用户可以使用快捷键操作,能大大提高工具使用效率。


 如何绑定快捷键

聪明的你也想到了,vue 官方文档自有解释:按键修饰符

但是实际实践过的你也可能知道,这种绑定按键事件的方式都是绑定在了当前 ViewModel 上的。也就是模版字符串 template 中,这样就无法自定义一个时机在 JavaScript 中自由调用。不过这样做也有好处,比如当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何清理它们。

这里使用第三方插件 keymaster 来做按键绑定,编程式绑定任意按键。


使用插件

安装

npm i keymaster -S
or
yarn add keymaster -S

使用

import key from 'keymaster'

// 给按键 A 绑定快捷键
key('a', function(){ alert('you pressed a!') });

// 回调函数返回 false 以阻止浏览器默认事件行为
key('ctrl+r', function(){ alert('stopped reload!'); return false });

// 绑定多个快捷键,做同一件事
key('⌘+r, ctrl+r', function(){ });

定制插件

如果一个函数被使用超过3次以上,我习惯封装一个通用函数,不如直接写成 vue 中的 plugin 好了。

// @/plugins/shortcut.js

import vue from 'vue'
import keymaster from 'keymaster'

const bindKeyHandler = fn => {
  return () => {
    fn()
    return false
  }
}

export const shortcut = {
  bind: (seed, func) => keymaster(seed, bindKeyHandler(func)),
  ...keymaster
}

vue.prototype.$shortcut = shortcut

插件为 vue.prototype 添加了全局方法 $shortcut,shortcut 扩展了 keymaster “遗散多年”的 bind 方法(绑定按键事件),我猜 keymaster 没有提供 bind API,可能是因为 bind() 是 JavaScript 内置的方法。为了避免命名冲突或者语法歧义。


绑定事件

举个例子:给应用添加保存功能,那快捷键一定是 ⌘ / Ctrl + S 啦

<script>
export default {
  ...
  mounted () {
		// 绑定按键绑全套,mac 和 windows
    this.$shortcut.bind('⌘+s, ctrl+s', this.handleSave)
  },
  methods: {
    handleSave () {
      // 保存逻辑
    }
  }
  ...
}
</script>

销毁事件

vue 组件中绑定事件监听器的最佳实践告诉我们,绑定后的事件是需要在组件销毁时候解绑的。

<script>
export default {
  ...
  beforeDestroy () {
    this.$shortcut.unbind('⌘+s, ctrl+s')
  }
  ...
}
</script>

做好防抖

拿上面绑定事件例子讲,可能包括你在内的开发者,会习惯无限 Ctrl + S 保存代码,一顿三连击以获得安全感,假设我为应用绑定了快捷键,但是没做防抖的话。那么会触发多次 handleSave 回调。其实这是没必要的。为了避免这种情况发生,我们让正常的回调函数变成防抖的回调函数

直接上例子,这里借助 lodash 中的 debounce 函数来实现:

<script>
import { debounce } from 'lodash'

export default {
  ...
  mounted () {
		// 绑定按键绑全套,mac 和 windows
    this.$shortcut.bind('⌘+s, ctrl+s', this.handleSave)
  },
  methods: {
    handleSave: debounce(function () {
      // 保存逻辑
    }, 200)
  }
  ...
}
</script>

快捷键列表

应用功能随之变多,为了方便管理管快捷,同时提升用户体验以及产品的专业性。我们可以给快捷键制作一个列表。统一展示快捷键。像这样:


系统间差异

要注意截图中展示的是 macOS 下的快捷键 ⌘,如果是 Windows 系统,那么需要替换相应的 Ctrl

我们可以使用 navigator.userAgent 来判断当前用户的操作系统是什么。来抉择在页面到底显示的快捷键字符。

你可以点击 https://simpl.info/useragent/来立即查看 navigator.userAgent 打印的内容

// 在不考虑 linux 系统的情况下,我们可以这样简单的判断当前的操作系统是 mac 还是 windows
const ns = navigator.userAgent
const isMacOS = /\b(Mac OS|Macintosh)\b/.test(ns)

语义化html

形如 ⌘ + S 这样的快捷键,我们可以使用 html 标签 <kbd> 来标识键盘映射。

<!-- 举个例子 -->
<kbd>⌘</kbd> + <kbd>S</kbd>

同类型类库

hotkeys是 keymaster 的临摹版

来自:https://www.xlbd.me/posts/2020-07-24-bind-shortcut-in-vue-project.html


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/9536

关闭

vscode前端必备插件及常用快捷键

Visual Studio安装插件方法:打开VS:工具 --> 扩展和更新 --> 联机,搜索插件名称,选择下载进行安装。这篇文章主要讲解vscode前端必备插件及常用快捷键...

chrome常用快捷键

工欲善其事,必先利其器,chrome前端调试必备工具!要想操作浏览器更有效率,我们可以试试掌握以下这些快捷键。

Mac谷歌(chrome)浏览器快捷键

标签页和窗口快捷键;Chrome 浏览器功能快捷键;地址栏快捷键;网页快捷键;按住 ⌘ 的同时点击链接。或用鼠标中键(或鼠标滚轮)点击链接。按 ⌘-O,然后选择文件。

Eclipse 最常用的快捷键

Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率。 最经典的快捷键,就不用多说了,可以解决很多问题,比如import类、try catch包围等

phpstorm常用快捷键整理

PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。虽然快捷键是可以自定义的,因为不同编辑器默认的快捷键大同小异,比较符合用户习惯。

Webstorm常用快捷键

下面是Webstorm的一些常用快捷键:1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文件。2. ctrl + j: 输出模板3. ctrl + b: 跳到变量申明处; ctrl + alt + T: 围绕包裹代码

sublime3快捷键大全与注意事项

Sublime Text 3在mac/windowd的快捷键大全:编辑快捷键、查找、替换快捷键、拆分窗口/标签页 快捷键、快捷操作、常见问题与注意事项...

bash快捷键整理

今天敲命令行时想在单词间移动,竟然不记得快速移动的快捷键。试了Ctrl + W和Ctrl + B/F均不凑效,于是怀念之前某博主分享的终端快捷键说明图。好在很快从浏览记录中找到了链接。Alan Skorkin将bash快捷键分成四类,接下来一一给出。

chrome浏览页面常用快捷键

Ctrl+N 打开新窗口。 Ctrl+T 打开新标签页。Ctrl+W关闭当前标签。Ctrl+Tab 或 Ctrl+PgDown 切换到下一个标签页。Ctrl+Shift+Tab 或 Ctrl+PgUp 切换到上一个标签页。

visual studio 使用技巧总结(含快捷键)

Visual Studio 常用技巧总结 合理使用快捷键可以提高开发效率,一些非常好用的功能、调试技巧等。学会了这些一定会让你的编程事半功备

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广