Winny 发表于 2022-8-31 19:44:13

SpreadJS禁用、启用、覆盖快捷键处理

SpreadJS内置了一些快捷键,整体的行为体现类似与Excel。但部分客户并不是想要一个与Excel行为一直的快捷键,常见的需求有以下几点:
1. 禁用快捷键
以复制(Ctrl+C)、粘贴(Ctrl+V)为例,实现代码如下:
spread.commandManager().setShortcutKey(null,GC.Spread.Commands.Key.c,true,false,false,false)

spread.commandManager().setShortcutKey(null,GC.Spread.Commands.Key.v,true,false,false,false)

2. 开启快捷键
以复制(Ctrl+C)、粘贴(Ctrl+V)为例,实现代码如下:
spread.commandManager().setShortcutKey("copy",GC.Spread.Commands.Key.c,true,false,false,false)

spread.commandManager().setShortcutKey("paste",GC.Spread.Commands.Key.v,true,false,false,false)

3. 覆盖快捷键
覆盖快捷键核心就是注册同名的快捷键,但是需要这一的是,内置的快捷键优先级高于自定义的快捷键。如果想优先使用自己定义的快捷键,需要重写单元格对事件的响应逻辑,详细代码如下:
// SpreadJS内置的快捷键优先级要高于自定义快捷键,在定义同样的快捷键时要先取消单元格对原事件的响应
GC.Spread.Sheets.CellTypes.Text.prototype.isReservedKey = function(event,context){
let src = event.srcElement || event.target
let {keyCode,ctrlKey,keyCode,altKey,metaKey,shiftKey} = event
// 按下Ctrl+Enter时优先执行自定义的快捷键,内置快捷键返回false
if(keyCode==13 && ctrlKey && (!shiftKey || altKey)){
return false
}else{
return oldFn.apply(this,arguments)
}
return false
}接下来按照自定义快捷键的方式去注册快捷键即可。详细的demo可以点击这里查看。




页: [1]
查看完整版本: SpreadJS禁用、启用、覆盖快捷键处理