Javascript 自定义密钥绑定的结构?
我希望创建一个用于存储和分派自定义(由最终用户)密钥绑定的结构 我在想一个结构,比如:Javascript 自定义密钥绑定的结构?,javascript,Javascript,我希望创建一个用于存储和分派自定义(由最终用户)密钥绑定的结构 我在想一个结构,比如: UserPrefs:{ KeyBindings:{ "I":{ Key:"I", CTRL:true, Action:"ToggleInteractiveMode" }, "S":{ Key:"S", CTRL:true, Action:"SaveSelecte
UserPrefs:{
KeyBindings:{
"I":{
Key:"I",
CTRL:true,
Action:"ToggleInteractiveMode"
},
"S":{
Key:"S",
CTRL:true,
Action:"SaveSelectedRecord"
},
"E":{
Key:"E",
CTRL:true,
Action:"EditSelectedRecord"
},
},
}
然后是一个全局键控函数,如:
eGlobalKeyUp = function(e, eventThis){
if(!e.which in UserPrefs.KeyBindings)
return; // This key or combo is not bound
if(UserPrefs.KeyBindings[e.which].CTRL === e.ctrlKey &&
UserPrefs.KeyBindings[e.which].ALT === e.altKey &&
UserPrefs.KeyBindings[e.which].SHIFT === e.shiftKey
){
UserPrefs.KeyBindings[e.which].Action();
}
}
当然,这个模型的问题是,通过使用键作为键,你不能为一个给定的键存储多个组合,也就是说,你不能有一个CTRL+L
和一个CTRL+SHIFT+L
,这当然是你想要的。不过,我确实喜欢在vs循环中使用的功能
是否有人实现了用户定义的热键映射结构,可以共享?我解决了这样的问题: 首先,描述所有键组合:
var keyBindings = [
{
Key: "I",
Action: "ToggleInteractiveMode"
},
{
Key: "I",
CTRL: true,
Action: "ToggleInteractiveMode+Ctrl"
},
{
Key: "I",
CTRL: true,
SHIFT: true,
Action: "ToggleInteractiveMode+Ctrl+Shift"
}
];
然后初始化密钥:
keyBindings.forEach( function( keyObject ) {
var keyName = "";
if ( keyObject.CTRL ) {
keyName += "CTRL_";
}
if ( keyObject.SHIFT ) {
keyName += "SHIFT_";
}
keyName += keyObject.Key;
keyBindings[keyName] = keyObject;
} );
现在,键绑定包含“I”、“CTRL\u I”、“CTRL\u SHIFT\u I”等键
现在在eGlobalKeyUp中,您可以使用如下内容:
var prefix = "";
if ( e.ctrlKey ) {prefix += "CTRL_";}
if ( e.shiftKey ) {prefix += "SHIFT_";}
if ( keyBindings[prefix + e.which] ) {
keyBindings[prefix + e.which].Action();
}
else {
return;
}