js鍵盤事件keydown事件、防止重復觸發(fā)以及組合鍵的配合使用
js鍵盤事件keydown事件,防止重復觸發(fā)
鍵盤事件類型主要有三種: keydown
、keypress
(不建議使用,部分瀏覽器已放棄)和 keyup
。
添加普通鍵盤keydown事件
// 監(jiān)聽鍵盤按下事件 document.addEventListener('keydown', function(event) { // 輸出按下的鍵的鍵碼 console.log('Key pressed:', event.key, 'Key code:', event.keyCode); });
但是此事件會如果不釋放按鍵就會重復觸發(fā),如何阻止呢?
阻止keydown事件重復觸發(fā)
①使用一個標志變量來跟蹤按鍵的狀態(tài)
let keyDownFlag = false; // 監(jiān)聽鍵盤按下事件 document.addEventListener('keydown', function(event) { if (!keyDownFlag) { keyDownFlag = true; console.log('Key pressed:', event.key, 'Key code:', event.keyCode); } }); // 監(jiān)聽鍵盤釋放事件 document.addEventListener('keyup', function() { keyDownFlag = false; });
②通過事件自帶的屬性判斷
repeat
屬性可以用于判斷鍵盤事件是否是由按鍵保持按下而持續(xù)觸發(fā)的。
// 監(jiān)聽鍵盤按下事件 document.addEventListener('keydown', function(event) { if (!event.repeat) { console.log('Key pressed:', event.key, 'Key code:', event.keyCode); }
在這個例子中,event.repeat 屬性被用于檢查是否是由按鍵保持按下而觸發(fā)的事件。如果 event.repeat 為 false,則表示這是一個新的按鍵事件,而不是持續(xù)觸發(fā)的事件。
組件鍵的配合使用
組件鍵一般就是就是通過keydown事件來觸發(fā)
document.onkeydown = function (oEvent) { console.log(oEvent); }
可以看到event對象中返回很多信息,其中keycode屬性中包含一份代碼,是鍵盤上對應的ASCII碼,type
是觸發(fā)事件的類型等等…
這里我們有幾個屬性是我們用的到的,就是altkey
屬性和ctrlkey
屬性還有shiftkey
。它們代表著鍵盤上的alt、ctrl、shift鍵對于事件觸發(fā)的判斷。當事件由這幾個鍵觸發(fā)時,它們的值會變成true.
那我可以通過上邊的內容結合這幾個屬性來監(jiān)聽鍵盤事件。
- 比如要監(jiān)聽ctrl + s的組合事件
document.onkeydown = functionb(oEvent) { var oEvent = oEvent || window.oEvent; //獲取鍵盤的keyCode值 var nKeyCode = oEvent.keyCode || oEvent.which || oEvent.charCode; //獲取ctrl 鍵對應的事件屬性 var bCtrlKeyCode = oEvent.ctrlKey || oEvent.metaKey; if( oEvent.nKeyCode == 83 && bCtrlKeyCode ) { alert('save'); //doSomeThing... } }
- 比如要監(jiān)聽Alt+ q的組合事件
document.onkeydown = functionb(e) { if(e.altKey && e.keyCode == 81){ if(e.repeat){ return } //todo somethink } }
雖然mac電腦操作有別于普通win電腦,但并不代表沒有alt鍵。 在mac電腦找到alt鍵并不難,鍵盤左下角的option鍵其實就是蘋果的alt鍵,旁邊的control鍵對應pc電腦的ctrl鍵,command鍵對應是win鍵,
附:判斷按的按鍵是否為ctrl、shift、alt
console.log(ev.ctrlKey); console.log(ev.shiftKey); console.log(ev.altKey);
總結
到此這篇關于js鍵盤事件keydown事件、防止重復觸發(fā)以及組合鍵的配合使用的文章就介紹到這了,更多相關js keydown事件防止重復觸發(fā)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
javascript面向對象三大特征之多態(tài)實例詳解
這篇文章主要介紹了javascript面向對象三大特征之多態(tài),結合實例形式詳細分析了javascript面向對象程序設計中多態(tài)的概念、原理,并結合實例形式總結了多態(tài)的實現(xiàn)方法與使用技巧,需要的朋友可以參考下2019-07-07詳解js的延遲對象、跨域、模板引擎、彈出層、AJAX【附實例下載】
本篇文章主要介紹了JavaScript的延遲對象、跨域、模板引擎、彈出層、AJAX,對其進行示例解析,具有很好的參考價值,需要的朋友一起來看下吧2016-12-12layui實現(xiàn)鼠標移動到單元格上顯示數(shù)據(jù)的方法
今天小編就為大家分享一篇layui實現(xiàn)鼠標移動到單元格上顯示數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript三種方法解決約瑟夫環(huán)問題的方法
約瑟夫環(huán)問題又稱約瑟夫問題或丟手絹問題,是一道經(jīng)典的算法問題,本篇將以循環(huán)鏈表、有序數(shù)組、數(shù)學遞歸三種方式來解決約瑟夫環(huán)問題。感興趣的可以了解一下2021-09-09