shortcuts dev
This commit is contained in:
49
src/libs/shortcut.js
Normal file
49
src/libs/shortcut.js
Normal file
@@ -0,0 +1,49 @@
|
||||
import { isSameSet } from "./utils";
|
||||
|
||||
/**
|
||||
* 键盘快捷键监听
|
||||
* @param {*} fn
|
||||
* @param {*} target
|
||||
* @returns
|
||||
*/
|
||||
export const shortcutListener = (fn, target = document) => {
|
||||
const allkeys = new Set();
|
||||
const curkeys = new Set();
|
||||
|
||||
const handleKeydown = (e) => {
|
||||
if (e.code) {
|
||||
allkeys.add(e.key);
|
||||
curkeys.add(e.key);
|
||||
}
|
||||
};
|
||||
|
||||
const handleKeyup = (e) => {
|
||||
curkeys.delete(e.key);
|
||||
if (curkeys.size === 0) {
|
||||
fn([...allkeys]);
|
||||
allkeys.clear();
|
||||
}
|
||||
};
|
||||
|
||||
target.addEventListener("keydown", handleKeydown);
|
||||
target.addEventListener("keyup", handleKeyup);
|
||||
return () => {
|
||||
target.removeEventListener("keydown", handleKeydown);
|
||||
target.removeEventListener("keyup", handleKeyup);
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 注册键盘快捷键
|
||||
* @param {*} targetKeys
|
||||
* @param {*} fn
|
||||
* @param {*} target
|
||||
* @returns
|
||||
*/
|
||||
export const shortcutRegister = (targetKeys, fn, target = document) => {
|
||||
return shortcutListener((keys) => {
|
||||
if (isSameSet(new Set(targetKeys), new Set(keys))) {
|
||||
fn();
|
||||
}
|
||||
}, target);
|
||||
};
|
||||
Reference in New Issue
Block a user