Class Keymap

主类

Hierarchy

  • Keymap

Constructors

  • 使用默认配置

    Example

    new Keymap([{ desc:'select all', keys: 'Control+a', handler() {/* do something */} }]);
    new Keymap([{ desc:'select all', keys: ['Control+a','Control+b'], handler() {/* do something */} }]);

    Parameters

    Returns Keymap

  • 使用自定义配置

    Example

    new Keymap({el:window, strategy:'recordCompose'},[{ desc:'select all', keys: 'Control+a', handler() {/* do something */} }]);
    

    Parameters

    Returns Keymap

Properties

_keyAliasMap: Record<string, string>

按键别名映射map

See

defaultKeyAliasMap

registeredMaps: HandledKeyOptions[]

已注册的所有组合键

canceler: Function

取消所有注册,并移除事件监听

Accessors

  • get keyAliasMap(): Record<string, string>
  • 获取按键别名配置

    注意⚠️:由于复制了一份obj,所以使用Object(keyAliasMap,{})不会起效

    Returns Record<string, string>

  • set keyAliasMap(alias: Record<string, string>): void
  • 设置按键别名

    Example


    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);

    Parameters

    • alias: Record<string, string>

    Returns void

  • get maps(): Omit<HandledKeyOptions, "handler">[]
  • 可用于显示所有的快捷键

    Returns

    所有已注册快捷键

    Returns Omit<HandledKeyOptions, "handler">[]

Methods

  • 根据keys查找所在index

    Parameters

    • keys: string
    • handledKeys: [string, string[]] = ...
    • registeredMaps: HandledKeyOptions[] = ...

    Returns number

  • 手动触发快捷键

    Example

    let count = 0;
    const km = new Keymap([{ keys: 'Control+a', handler: ()=> count++ }]);

    km.trigger('Control+a');
    console.log(count); // 1

    km.trigger('Ctrl+a');
    console.log(count); // 2

    Parameters

    • keys: string

    Returns void

  • 判断快捷键是否已经被绑定

    Example

     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

    Parameters

    • keys: string

    Returns boolean

  • 添加快捷键

    Example

    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;

    Returns

    是否添加成功数量

    Parameters

    Returns number

  • 移除快捷键键

    Example

    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

    Parameters

    • keys: string

    Returns void

  • 销毁

    之后再调用add会报错

    Returns void