Socket
Socket
Sign inDemoInstall

hotkeys-js

Package Overview
Dependencies
Maintainers
1
Versions
101
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hotkeys-js - npm Package Compare versions

Comparing version 1.0.1 to 1.0.2

3

bower.json
{
"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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc