設置快捷鍵
這是一個強健的 Javascript 庫用於捕獲鍵盤輸入和輸入的組合鍵,它沒有依賴,壓縮只有只有(~3kb)。
創建
您將需要在您的系統上安裝的 Node.js。
1 # bower 安裝 2 $ bower install hotkeysjs 3 4 # npm 安裝 5 $ npm install hotkeys-js 6 7 # 在頁面上引用需要壓縮的話,運行 8 $ grunt dist 9 10 # 在dist目錄中生成下列文件: 11 # dist/hotkeys.js 12 # dist/hotkeys.min.js 13 # dist/hotkeys.min.map
定義快捷鍵
1 // 定義a快捷鍵 2 hotkeys('a', function(event,handler){ 3 //event.srcElement: input 4 //event.target: input 5 if(event.target === "input"){ 6 alert('你在輸入框中按下了 a!') 7 } 8 alert('你按下了 a!') 9 }); 10 11 // 定義a快捷鍵 12 hotkeys('ctrl+a,ctrl+b,r,f', function(event,handler){ 13 switch(handler.key){ 14 case "ctrl+a":alert('你按下了ctrl+a!');break; 15 case "ctrl+b":alert('你按下了ctrl+b!');break; 16 case "r":alert('你按下了r!');break; 17 case "f":alert('你按下了f!');break; 18 } 19 //handler.scope 范圍 20 }); 21 22 // 返回false將停止活動,並阻止默認瀏覽器事件 23 hotkeys('ctrl+r', function(){ alert('停止刷新!'); return false }); 24 25 // 多個快捷方式做同樣的事情 26 hotkeys('⌘+r, ctrl+r', function(){ }); 27 28 // 對所有摁鍵執行任務 29 hotkeys('*','wcj', function(e){ 30 console.log('干點活兒',e); 31 console.log("key.getScope()::",hotkeys.getScope()); 32 if(hotkeys.shift) console.log('大哥你摁下了 shift 鍵!'); 33 if(hotkeys.ctrl) console.log('大哥你摁下了 ctrl 鍵!'); 34 if(hotkeys.alt) console.log('大哥你摁下了 alt 鍵!'); 35 });
支持的鍵
⇧, shift, option, ⌥, alt, ctrl, control, command, ⌘。 ⌘ Command() ⌃ Control ⌥ Option(alt) ⇧ Shift ⇪ Caps Lock(大寫) fn 功能鍵就是fn(不支持) ↩︎ return/Enter space 空格鍵
修飾鍵判斷
可以對下面的修飾鍵判斷 shift
alt
option
ctrl
control
command
1 hotkeys('shift+a,alt+d, w', function(e){ 2 console.log('干點活兒',e); 3 if(hotkeys.shift) console.log('大哥你摁下了 shift 鍵!'); 4 if(hotkeys.ctrl) console.log('大哥你摁下了 ctrl 鍵!'); 5 if(hotkeys.alt) console.log('大哥你摁下了 alt 鍵!'); 6 });
切換快捷鍵
如果在單頁面在不同的區域,相同的快捷鍵,干不同的事兒,之間來回切換。O(∩_∩)O !
1 // 一個快捷鍵,有可能干的活兒不一樣哦 2 hotkeys('ctrl+o, ctrl+alt+enter', 'issues', function(){ 3 console.log('干點活兒'); 4 }); 5 hotkeys('o, enter', 'files', function(){ 6 console.log('另一種活兒'); 7 }); 8 9 // 設定范圍scope 10 hotkeys.setScope('issues'); // 默認所有事兒都干哦
刪除標記快捷鍵
刪除區域范圍標記
hotkeys.deleteScope('issues');
解除綁定
1 hotkeys.unbind("ctrl+o, ctrl+alt+enter") 解除綁定兩組快捷鍵 2 hotkeys.unbind("ctrl+o","files") 解除綁定名字叫files鍾的一組快捷鍵
鍵判斷
判斷摁下的鍵是否為某個鍵
1 hotkeys('a', function(){ 2 console.log(hotkeys.isPressed("A")); //=> true 3 console.log(hotkeys.isPressed(65)); //=> true 4 });
獲取摁下鍵值
1 獲取摁下綁定鍵的鍵值 hotkeys.getPressedKeyCodes()
1 hotkeys('command+ctrl+shift+a,f', function(){ 2 console.log(hotkeys.getPressedKeyCodes()); //=> [17, 65] 或者 [70] 3 })
過濾
INPUT SELECT TEXTAREA 默認不處理。 hotkeys.filter 返回 true 快捷鍵設置才會起作用,flase 快捷鍵設置失效。
1 hotkeys.filter = function(event){ 2 return true; 3 } 4 //如何增加過濾可編輯標簽 <div contentEditable="true"></div> 5 //contentEditable老瀏覽器不支持滴 6 hotkeys.filter = function(event) { 7 var tagName = (event.target || event.srcElement).tagName; 8 return !(tagName.isContentEditable || 9 tagName == 'INPUT' || 10 tagName == 'SELECT' || 11 tagName == 'TEXTAREA'); 12 } 13 14 // 15 hotkeys.filter = function(event){ 16 var tagName = (event.target || event.srcElement).tagName; 17 hotkeys.setScope(/^(INPUT|TEXTAREA|SELECT)$/.test(tagName) ? 'input' : 'other'); 18 return true; 19 }
兼容模式
1 var k = hotkeys.noConflict(); 2 k('a', function() { 3 console.log("這里可以干一些事兒") 4 }); 5 6 hotkeys() 7 // -->Uncaught TypeError: hotkeys is not a function(anonymous function) 8 // @ VM2170:2InjectedScript._evaluateOn 9 // @ VM2165:883InjectedScript._evaluateAndWrap 10 // @ VM2165:816InjectedScript.evaluate @ VM2165:682