找回密码
 立即注册

QQ登录

只需一步,快速开始

Winny

超级版主

141

主题

263

帖子

1696

积分

超级版主

Rank: 8Rank: 8

积分
1696
Winny
超级版主   /  发表于:2022-8-31 19:44  /   查看:2150  /  回复:0
SpreadJS内置了一些快捷键,整体的行为体现类似与Excel。但部分客户并不是想要一个与Excel行为一直的快捷键,常见的需求有以下几点:
1. 禁用快捷键
以复制(Ctrl+C)、粘贴(Ctrl+V)为例,实现代码如下:
  1. spread.commandManager().setShortcutKey(null,GC.Spread.Commands.Key.c,true,false,false,false)

  2. spread.commandManager().setShortcutKey(null,GC.Spread.Commands.Key.v,true,false,false,false)
复制代码


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

  2. spread.commandManager().setShortcutKey("paste",GC.Spread.Commands.Key.v,true,false,false,false)
复制代码


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




0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部