hotkeys-js
Advanced tools
Comparing version 1.0.1 to 1.0.2
{ | ||
"name": "hotkeys-js", | ||
"main": "src/hotkeys.js", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"homepage": "https://github.com/jaywcjlove/hotkeys", | ||
@@ -13,2 +13,3 @@ "authors": [ | ||
"keys", | ||
"keybind", | ||
"keyboard", | ||
@@ -15,0 +16,0 @@ "shortcuts" |
{ | ||
"name": "hotkeys-js", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.", | ||
@@ -20,4 +20,5 @@ "keywords": [ | ||
"grunt-contrib-uglify": "^0.9.1", | ||
"grunt-contrib-watch": "^0.6.1" | ||
"grunt-contrib-watch": "^0.6.1", | ||
"grunt-dist": "0.0.3" | ||
} | ||
} |
@@ -5,15 +5,34 @@ # 设置快捷键 | ||
这又是在重复造轮子,呵呵~!! | ||
自定义快捷键没有依赖。这又是在重复造轮子,呵呵~!! | ||
## 下载 | ||
### bower | ||
Run `bower info hotkeysjs` to list the available versions. | ||
下载 `bower install hotkeysjs` | ||
``` | ||
__ __ __ | ||
| |--..-----.| |_ | |--..-----..--.--..-----. | ||
| || _ || _|| < | -__|| | ||__ --| | ||
|__|__||_____||____||__|__||_____||___ ||_____| | ||
|_____| | ||
``` | ||
### npm | ||
## 创建 | ||
下载 `npm install hotkeys-js` | ||
您将需要在您的系统上安装的 Node.js。 | ||
```sh | ||
# npm 安装 | ||
$ bower install hotkeysjs | ||
# npm 安装 | ||
$ npm install hotkeys-js | ||
# 在页面上引用需要压缩的话,运行 | ||
$ grunt dist | ||
# 在dist目录中生成下列文件: | ||
# dist/hotkeys.js | ||
# dist/hotkeys.min.js | ||
# dist/hotkeys.min.map | ||
``` | ||
## 定义快捷键 | ||
@@ -23,3 +42,3 @@ | ||
// 定义a快捷键 | ||
hotkeys('a', function(event){ | ||
hotkeys('a', function(event,handler){ | ||
//event.srcElement: input | ||
@@ -31,4 +50,15 @@ //event.target: input | ||
alert('你按下了 a!') | ||
}); | ||
}); | ||
// 定义a快捷键 | ||
hotkeys('ctrl+a,ctrl+b,r,f', function(event,handler){ | ||
switch(handler.key){ | ||
case "ctrl+a":alert('你按下了ctrl+a!');break; | ||
case "ctrl+b":alert('你按下了ctrl+b!');break; | ||
case "r":alert('你按下了r!');break; | ||
case "f":alert('你按下了f!');break; | ||
} | ||
//handler.scope 范围 | ||
}); | ||
// 返回false将停止活动,并阻止默认浏览器事件 | ||
@@ -39,5 +69,13 @@ hotkeys('ctrl+r', function(){ alert('停止刷新!'); return false }); | ||
hotkeys('⌘+r, ctrl+r', function(){ }); | ||
// 对所有摁键执行任务 | ||
hotkeys('*','wcj', function(e){ | ||
console.log('干点活儿',e); | ||
console.log("key.getScope()::",hotkeys.getScope()); | ||
if(hotkeys.shift) console.log('大哥你摁下了 shift 键!'); | ||
if(hotkeys.ctrl) console.log('大哥你摁下了 ctrl 键!'); | ||
if(hotkeys.alt) console.log('大哥你摁下了 alt 键!'); | ||
}); | ||
``` | ||
## 支持的键 | ||
@@ -54,2 +92,3 @@ | ||
`↩︎` return/Enter | ||
`space` 空格键 | ||
@@ -60,3 +99,8 @@ ## 修饰键判断 | ||
```js | ||
if(hotkeys.shift) console.log('大哥你摁下了shift键!'); | ||
hotkeys('shift+a,alt+d, w', function(e){ | ||
console.log('干点活儿',e); | ||
if(hotkeys.shift) console.log('大哥你摁下了 shift 键!'); | ||
if(hotkeys.ctrl) console.log('大哥你摁下了 ctrl 键!'); | ||
if(hotkeys.alt) console.log('大哥你摁下了 alt 键!'); | ||
}); | ||
``` | ||
@@ -66,2 +110,4 @@ | ||
如果在单页面在不同的区域,相同的快捷键,干不同的事儿,之间来回切换。O(∩_∩)O ! | ||
```js | ||
@@ -80,2 +126,10 @@ // 一个快捷键,有可能干的活儿不一样哦 | ||
## 删除标记快捷键 | ||
删除区域范围标记 | ||
```js | ||
hotkeys.deleteScope('issues'); | ||
``` | ||
## 解除绑定 | ||
@@ -98,3 +152,3 @@ | ||
## 获取摁下键值 | ||
获取摁下绑定键的键值 | ||
获取摁下绑定键的键值 `hotkeys.getPressedKeyCodes()` | ||
@@ -110,8 +164,21 @@ ```js | ||
`INPUT` `SELECT` `TEXTAREA` 默认不处理。 | ||
`key.filter` 返回 `true` 快捷键设置才会起作用,`flase` 快捷键设置失效。 | ||
`hotkeys.filter` 返回 `true` 快捷键设置才会起作用,`flase` 快捷键设置失效。 | ||
```javascript | ||
key.filter = function(event){ | ||
hotkeys.filter = function(event){ | ||
return true; | ||
} | ||
//如何增加过滤可编辑标签 <div contentEditable="true"></div> | ||
//contentEditable老浏览器不支持滴 | ||
hotkeys.filter = function(event) { | ||
var tagName = (event.target || event.srcElement).tagName; | ||
return !(tagName.isContentEditable || tagName == 'INPUT' || tagName == 'SELECT' || tagName == 'TEXTAREA'); | ||
} | ||
// | ||
hotkeys.filter = function(event){ | ||
var tagName = (event.target || event.srcElement).tagName; | ||
hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT)$/.test(tagName) ? 'input' : 'other'); | ||
return true; | ||
} | ||
``` | ||
@@ -118,0 +185,0 @@ |
@@ -60,2 +60,3 @@ //IE对indexOf方法的支持 | ||
code = function(x){ | ||
console.log(); | ||
return _keyMap[x] || x.toUpperCase().charCodeAt(0); | ||
@@ -91,7 +92,6 @@ }, | ||
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); | ||
//Gecko(Friefox)的command键值224,在Webkit(Chrome)中保持一致 | ||
@@ -104,34 +104,48 @@ //Webkit左右command键值不一样 | ||
for(var k in _modifier)if(_modifier[k] === key) hotkeys[k] = true; | ||
return; | ||
if(!asterisk) return; | ||
} | ||
//将modifierMap里面的修饰键绑定到event中 | ||
for(var e in _mods) _mods[e] = event[modifierMap[e]]; | ||
//表单控件控件过滤 默认表单控件不触发快捷键 | ||
if(!hotkeys.filter.call(this,event)) return; | ||
//获取范围 默认为all | ||
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; | ||
//获取范围 默认为all | ||
scope = getScope(); | ||
for (i = 0; i < _handlers[key].length; i++) { | ||
//找到处理内容 | ||
handler = _handlers[key][i]; | ||
//看它是否在当前范围 | ||
if(handler.scope === scope || handler.scope === 'all'){ | ||
modifiersMatch = handler.mods.length > 0; | ||
for(var y in _mods){ | ||
if((!_mods[y] && handler.mods.indexOf(+y) > -1) || | ||
(_mods[y] && handler.mods.indexOf(+y) === -1)) modifiersMatch = false; | ||
eventHandler(_handlers[key][i],scope); | ||
} | ||
} | ||
function eventHandler(handler,scope){ | ||
var modifiersMatch; | ||
//看它是否在当前范围 | ||
if(handler.scope === scope || handler.scope === 'all'){ | ||
//检查是否匹配修饰符(如果有返回true) | ||
modifiersMatch = handler.mods.length > 0; | ||
for(var y in _mods){ | ||
if((!_mods[y] && handler.mods.indexOf(+y) > -1) || | ||
(_mods[y] && handler.mods.indexOf(+y) === -1)) modifiersMatch = false; | ||
} | ||
// 调用处理程序,如果是修饰键不做处理 | ||
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; | ||
} | ||
// 调用处理程序,如果是修饰键不做处理 | ||
if((handler.mods.length === 0 && !_mods[16] && !_mods[18] && !_mods[17] && !_mods[91]) || modifiersMatch){ | ||
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; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
//解除绑定某个范围的快捷键 | ||
@@ -169,2 +183,13 @@ function unbind (key,scope) { | ||
} | ||
//循环删除handlers中的所有 scope(范围) | ||
function deleteScope(scope){ | ||
var key, handlers, i; | ||
for (key in _handlers) { | ||
handlers = _handlers[key]; | ||
for (i = 0; i < handlers.length; ) { | ||
if (handlers[i].scope === scope) handlers.splice(i, 1); | ||
else i++; | ||
} | ||
} | ||
} | ||
//比较修饰键的数组 | ||
@@ -198,12 +223,24 @@ function compareArray(a1, a2) { | ||
} | ||
//在全局document上设置快捷键 | ||
addEvent(document, 'keydown', function(event) { | ||
dispatch(event); | ||
dispatch(event); | ||
}); | ||
//清除修改 | ||
addEvent(document, 'keyup',function(event){ | ||
clearModifier(event); | ||
}); | ||
//清除修饰键 | ||
function clearModifier(event){ | ||
var key = event.keyCode, | ||
i = _downKeys.indexOf(key); | ||
if(i>=0) _downKeys.splice(i,1); | ||
}); | ||
//修饰键 shiftKey altKey ctrlKey (command||metaKey) 清除 | ||
if(key === 93 || key === 224) key = 91; | ||
if(key in _mods) { | ||
_mods[key] = false; | ||
for(var k in _modifier) if(_modifier[k] === key) hotkeys[k] = false; | ||
} | ||
} | ||
//主体hotkeys函数 | ||
@@ -228,3 +265,3 @@ function hotkeys(key,scope,method){ | ||
key = key[0]; | ||
key = code(key); | ||
key = key === '*' ? '*' : code(key); | ||
//判断key是否在_handlers中,不在就赋一个空数组 | ||
@@ -231,0 +268,0 @@ if (!(key in _handlers)) _handlers[key] = []; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
19031
281
190
5
7