好用的按键响应库

使用 hotkeys-js 库来兼容 mac、windows 的键盘快捷键。封装一个基础 hooks 如下

  1. import hotkeys, { KeyHandler } from 'hotkeys-js';
  2. import { useEffect } from 'react';
  3. const useHotKey = (keys: string, callback: KeyHandler) => {
  4. useEffect(() => {
  5. hotkeys(keys, callback);
  6. return () => hotkeys.unbind(keys, callback);
  7. }, [keys, callback]);
  8. };
  9. export default useHotKey;

快捷键操作

元素选择

前提都是在元素被选中的情况

  • ⌘C / Ctrl+C 新建当前选择的元素的一个数据结构
  • ⌘V / Ctrl+V 将新建的元素添加到 components 数组中
  • Backspace / Delete 在 components 数组中删除选择的元素
  • ESC currentElement 设置为空

元素移动

  • 上下左右移动一像素 - ↑ ↓ → ← : 更新选中元素 props 的 top/left 值
  • 上下左右移动十像素 - Shift + ↑ ↓ → ←:更新选中元素 props 的 top/left 值

撤销/重做

  • 撤销 - ⌘Z / Ctrl+Z
  • 重做 - ⌘⇧Z / Ctrl+Shift+Z

插件化

  1. export default function InitHotKeys() {
  2. const { dispatch } = useContext<IContextProps>(AppContext);
  3. useHotKey('ctrl+c, command+c', () => {
  4. dispatch({
  5. type: COPYCOMPONENT,
  6. });
  7. });
  8. // ....
  9. }

如上我们实现了复制的功能、实际还是调用自定义的 Redux 方法、其他都是一样的操作。然后我们只需要在 main 直接调用自定义的hooks 即可 😌