添加对所有摁键执行任务功能

pull/11/head
jaywcjlove 10 years ago
parent 632036b134
commit 964038e171

@ -57,6 +57,7 @@ if(!Array.indexOf){
_mods = { 16: false, 18: false, 17: false, 91: false }, _mods = { 16: false, 18: false, 17: false, 91: false },
//返回键码 //返回键码
code = function(x){ code = function(x){
console.log();
return _keyMap[x] || x.toUpperCase().charCodeAt(0); return _keyMap[x] || x.toUpperCase().charCodeAt(0);
}, },
_handlers={}; _handlers={};
@ -87,11 +88,10 @@ if(!Array.indexOf){
function getPressedKeyCodes (argument) { return _downKeys.slice(0);} function getPressedKeyCodes (argument) { return _downKeys.slice(0);}
//处理keydown事件 //处理keydown事件
function dispatch (event) { function dispatch (event) {
var key = event.keyCode,modifiersMatch,scope,handler; var key = event.keyCode,scope,asterisk = _handlers['*'];
//搜集绑定的键 //搜集绑定的键
if(_downKeys.indexOf(key)===-1) _downKeys.push(key); if(_downKeys.indexOf(key)===-1) _downKeys.push(key);
//Gecko(Friefox)的command键值224在Webkit(Chrome)中保持一致 //Gecko(Friefox)的command键值224在Webkit(Chrome)中保持一致
//Webkit左右command键值不一样 //Webkit左右command键值不一样
if(key === 93 || key === 224) key = 91; if(key === 93 || key === 224) key = 91;
@ -99,40 +99,52 @@ if(!Array.indexOf){
_mods[key] = true; _mods[key] = true;
// 将特殊字符的key注册到 hotkeys 上 // 将特殊字符的key注册到 hotkeys 上
for(var k in _modifier)if(_modifier[k] === key) hotkeys[k] = true; for(var k in _modifier)if(_modifier[k] === key) hotkeys[k] = true;
return; if(!asterisk) return;
} }
//将modifierMap里面的修饰键绑定到event中 //将modifierMap里面的修饰键绑定到event中
for(var e in _mods) _mods[e] = event[modifierMap[e]]; for(var e in _mods) _mods[e] = event[modifierMap[e]];
//表单控件控件过滤 默认表单控件不触发快捷键 //表单控件控件过滤 默认表单控件不触发快捷键
if(!hotkeys.filter.call(this,event)) return; if(!hotkeys.filter.call(this,event)) return;
// key 不在_handlers中返回
if (!(key in _handlers)) return;
//获取范围 默认为all //获取范围 默认为all
scope = getScope(); scope = getScope();
//对任何按键做处理
if(asterisk) for (i = 0; i < asterisk.length; i++) {
if(asterisk[i].scope === scope) eventHandler(asterisk[i],scope);
}
// key 不在_handlers中返回
if (!(key in _handlers)) return;
for (i = 0; i < _handlers[key].length; i++) { for (i = 0; i < _handlers[key].length; i++) {
//找到处理内容 //找到处理内容
handler = _handlers[key][i]; eventHandler(_handlers[key][i],scope);
//看它是否在当前范围 }
if(handler.scope === scope || handler.scope === 'all'){ }
//检查是否匹配修饰符如果有返回true
modifiersMatch = handler.mods.length > 0; function eventHandler(handler,scope){
for(var y in _mods){ var modifiersMatch;
if((!_mods[y] && handler.mods.indexOf(+y) > -1) || //看它是否在当前范围
(_mods[y] && handler.mods.indexOf(+y) === -1)) modifiersMatch = false; if(handler.scope === scope || handler.scope === 'all'){
} //检查是否匹配修饰符如果有返回true
// 调用处理程序,如果是修饰键不做处理 modifiersMatch = handler.mods.length > 0;
if((handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ for(var y in _mods){
if(handler.method(event, handler)===false){ if((!_mods[y] && handler.mods.indexOf(+y) > -1) ||
if(event.preventDefault) event.preventDefault(); (_mods[y] && handler.mods.indexOf(+y) === -1)) modifiersMatch = false;
else event.returnValue = false; }
if(event.stopPropagation) event.stopPropagation(); // 调用处理程序,如果是修饰键不做处理
if(event.cancelBubble) event.cancelBubble = true; if((handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch || handler.shortcut === '*'){
} if(handler.method(event, handler)===false){
if(event.preventDefault) event.preventDefault();
else event.returnValue = false;
if(event.stopPropagation) event.stopPropagation();
if(event.cancelBubble) event.cancelBubble = true;
} }
} }
} }
} }
//解除绑定某个范围的快捷键 //解除绑定某个范围的快捷键
function unbind (key,scope) { function unbind (key,scope) {
var multipleKeys = getKeys(key),keys,mods = [],obj; var multipleKeys = getKeys(key),keys,mods = [],obj;
@ -220,10 +232,10 @@ if(!Array.indexOf){
if(i>=0) _downKeys.splice(i,1); if(i>=0) _downKeys.splice(i,1);
//修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除 //修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除
if(key == 93 || key == 224) key = 91; if(key === 93 || key === 224) key = 91;
if(key in _mods) { if(key in _mods) {
_mods[key] = false; _mods[key] = false;
for(k in _modifier) if(_modifier[k] == key) hotkeys[k] = false; for(var k in _modifier) if(_modifier[k] === key) hotkeys[k] = false;
} }
} }
//主体hotkeys函数 //主体hotkeys函数
@ -245,7 +257,7 @@ if(!Array.indexOf){
} }
//转换成键码 //转换成键码
key = key[0]; key = key[0];
key = code(key); key = key === '*' ? '*' : code(key);
//判断key是否在_handlers中不在就赋一个空数组 //判断key是否在_handlers中不在就赋一个空数组
if (!(key in _handlers)) _handlers[key] = []; if (!(key in _handlers)) _handlers[key] = [];
_handlers[key].push({shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods}); _handlers[key].push({shortcut: keys[i], scope: scope, method: method, key: keys[i], mods: mods});

Loading…
Cancel
Save