使用默认配置
new Keymap([{ desc:'select all', keys: 'Control+a', handler() {/* do something */} }]);
new Keymap([{ desc:'select all', keys: ['Control+a','Control+b'], handler() {/* do something */} }]);
事件绑定选项数组
使用自定义配置
new Keymap({el:window, strategy:'recordCompose'},[{ desc:'select all', keys: 'Control+a', handler() {/* do something */} }]);
Optional
maps: KeyOptions[]事件绑定选项数组
Private
_key按键别名映射map
defaultKeyAliasMap
Private
Readonly
registered已注册的所有组合键
Private
Readonly
canceler取消所有注册,并移除事件监听
获取按键别名配置
注意⚠️:由于复制了一份obj,所以使用Object(keyAliasMap,{})不会起效
设置按键别名
const km = new Keymap([{ desc: 'test', keys: ['Control + a', 'Meta + a'], handler: () => {} }]);
// [
// {
// desc: 'test',
// keyList: ['control', 'a'],
// keys: 'control + a',
// rawKeys: ['Control + a', 'Meta + a'],
// },
// {
// desc: 'test',
// keyList: ['meta', 'a'],
// keys: 'meta + a',
// rawKeys: ['Control + a', 'Meta + a'],
// },
// ]
console.log(km.maps);
console.log(km.has('ctrl+a')); // true
// 使用 Object.assign(km.keyAliasMap, { ctrl: '' }) 不起作用
Object.assign(km.keyAliasMap, { ctrl: '' });
console.log(km.has('ctrl+a')); // true
// 清理所有别名
km.keyAliasMap = {};
// ctrl不再是Control的别名,所以 ctrl+a 不存在
console.log(km.has('ctrl+a')); // false
// 让control成为alt的别名
console.log(km.has('alt+a')); // false
km.keyAliasMap = { control: 'alt' };
console.log(km.has('alt+a')); // true
// [
// {
// desc: 'test',
// keyList: ['alt', 'a'],
// keys: 'control + a',
// rawKeys: ['Control + a', 'Meta + a'],
// },
// {
// desc: 'test',
// keyList: ['meta', 'a'],
// keys: 'meta + a',
// rawKeys: ['Control + a', 'Meta + a'],
// },
// ]
console.log(km.maps);
可用于显示所有的快捷键
所有已注册快捷键
Private
handle处理组合键数组
Private
find判断快捷键是否已经被绑定
const km = new Keymap([{ keys: 'Control+a', handler: () => {} }]);
console.log(km.has('Control+a')); // true
console.log(km.has('control+a')); // true
console.log(km.has('ctrl+a')); // true
console.log(km.has('ctrl+b')); // false
添加快捷键
let count = 0;
const km = new Keymap([{ keys: 'Control+a', handler: () => {} }]);
km.add({ keys: 'ctrl+b', handler: () => count++ });
console.log(km.has('ctrl+b')); // true
km.trigger('Control+b');
console.log(count) // 1;
是否添加成功数量
移除快捷键键
let count = 0;
const km = new Keymap([
{ keys: 'Control+a', handler: () => {} },
{ keys: 'Control+b', handler: () => count++ },
]);
km.trigger('ctrl+a');
km.trigger('ctrl+b');
console.log(count); // 1
km.remove('ctrl+b');
km.trigger('ctrl+a');
km.trigger('ctrl+b');
console.log(count); // 1
主类