shortcut.js
1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
define("shortcut", ['jquery'], function() {
var Keys = function() {
var ret = {
MODIFIER_KEYS: {
16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta'
},
PRINTABLE_KEYS: {
83: 's', 85: 'u', 67: 'c', 86: 'v'
}
};
var name, modifierKeycode, printableKeycode;
for( modifierKeycode in ret.MODIFIER_KEYS) {
name = ret.MODIFIER_KEYS[modifierKeycode].toLowerCase();
ret[name] = parseInt(modifierKeycode, 10);
}
for( printableKeycode in ret.PRINTABLE_KEYS) {
name = ret.PRINTABLE_KEYS[printableKeycode].toLowerCase();
ret[name] = parseInt(printableKeycode, 10);
}
return ret;
}();
var uid = 0;
var ShortCut = function(options) {
var container = options.container || document;
var shortcuts = options.shortcuts || {};
$(container).on('keydown.shortcut'+(uid++), function(e) {
var ctrl = e.ctrlKey && 'ctrl+' || '',
alt = e.altKey && 'alt+' || '',
keyString = keyCodeToString(e.keyCode);
var shortcut = ctrl + alt + keyString;
var shortcutObj = shortcuts[shortcut];
if(!shortcutObj) return;
if(shortcutObj.preventDefault) {
e.preventDefault();
}
return shortcutObj.handler.call(null, e);
});
};
function keyCodeToString (keyCode) {
var keyString = Keys[keyCode];
if (typeof keyString != "string")
keyString = String.fromCharCode(keyCode);
return keyString.toLowerCase();
}
return {
/**
* options => {
* container: 快捷键容器
* shortcuts: {
* shortcut: "ctrl+s",
* handler: function() {}
* }
* }
*/
init: function(options) {
return new ShortCut(options);
}
}
});