国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript 組合按鍵事件監聽實現代碼

2019-11-19 17:28:43
字體:
來源:轉載
供稿:網友

javascript 組合按鍵事件監聽實現代碼

JS組合按鍵事件監聽,支持同時監聽多組按鍵如{a,b,c,}{ctrl,c}。

實例代碼:

<script type="text/javascript">    (function(){     /**     *dqKeys v1.0.0 | (c) 2016 www.findme.wang     *@params json keys 監聽的按鍵     *@params bool isOrder 按鍵是否有相應的順序     *@params Function sucFuc 完成按鍵的回調函數     *@params Function cancelFuc 完成按鍵取消后的回調函數     *@author lidequan     */     var dqKeys = function(keys,isOrder,sucFuc,cancelFuc) {       // 函數體       return new dqKeys.fn.init(keys,isOrder,sucFuc,cancelFuc);     }     dqKeys.fn = dqKeys.prototype = {       'version':'1.0.0',  //版本號       'author':'lidequan', //作者       'rightKeys':{},   //監聽的按鍵{key:code},code為按鍵對應的ascii碼        'curKeys':[],    //當前按下的鍵       'sucFuc':null,    //完成按鍵的回調函數       'cancelFuc':null,  //完成按鍵取消后的回調函數       'isFinsh':false,  //判斷是否完成按鍵       'isOrder':false,  //按鍵是否有相應的順序       init:function(keys,isOrder,sucFuc,cancelFuc){         this.rightKeys=keys;         this.sucFuc=sucFuc;         this.cancelFuc=cancelFuc;         this.isOrder=isOrder;                   return this;       },       listenkeys:function(){//監聽用戶鍵盤操作                 var _self=this;         _self.addListener('keydown', function(oEvent){           var oEvent =oEvent || window.event;           if(!_self.arrayContain(_self.curKeys,oEvent.keyCode)){             if(_self.isOrder && _self.getNextKey() == oEvent.keyCode){               _self.curKeys.push(oEvent.keyCode);             }else if(!_self.isOrder){               _self.curKeys.push(oEvent.keyCode);             }           }           if(_self.checkResult(_self.rightKeys,_self.curKeys)){             if(_self.sucFuc && !_self.isFinsh){               _self.sucFuc();             }             _self.isFinsh=true;           }         });         _self.addListener('keyup', function(oEvent){           var oEvent =oEvent || window.event;                    if(_self.checkResult(_self.rightKeys,_self.curKeys) && _self.isFinsh){                //完成按鍵,又取消的事件             if(_self.cancelFuc){               _self.cancelFuc();             }           }             _self.curKey=_self.remove(_self.curKeys,oEvent.keyCode);           _self.isFinsh=false;         });       },       arrayContain:function(arr,val){//判斷數組中是否包含某個元素           return (arr.indexOf(val) == -1) ? false:true;       },       checkResult:function(json,arr){ //判斷用戶是否按下監聽的所有按鍵         for(var i in json){            if(arr.indexOf(json[i])==-1){              return false;            }          }         return true;       },       remove:function(arr,val) { //從數組中移除某個元素               var index = arr.indexOf(val);          if (index > -1) {            arr.splice(index, 1);          }          return arr;       },       getNextKey:function(){ //獲取下一次按鍵對應的ascii碼         for(var i in this.rightKeys){           if(this.curKeys.indexOf(this.rightKeys[i])==-1){              return this.rightKeys[i];            }         }         return null;       },       addListener:function(ev,fn,bool){ //事件綁定         if (document.attachEvent) {            document.attachEvent('on' + ev, fn);          }else{             document.addEventListener(ev,fn,bool);          }        }       }     dqKeys.fn.init.prototype = dqKeys.fn;     window.dqKeys = window.$$= dqKeys;    })();     //1.測試   dqKeys({'a':65,'b':66},true,function(){                   console.log('okey');                 },function(){                   console.log('cancel');                 }).listenkeys();     //2.測試   var dqKeys=new $$({'c':67,'d':68},false,function(){                   console.log('keys down ');                 },function(){                   console.log('keys cancel');                 });   dqKeys.listenkeys();   </script>

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万州区| 洮南市| 西和县| 鄂伦春自治旗| 永康市| 垦利县| 通州区| 龙川县| 界首市| 阳信县| 辉县市| 文登市| 武乡县| 太湖县| 河间市| 板桥市| 舟曲县| 余干县| 奉贤区| 盈江县| 梁山县| 琼中| 雷州市| 苗栗县| 阜城县| 高安市| 灌阳县| 大埔区| 通道| 伊通| 九龙坡区| 长岛县| 仙居县| 慈溪市| 忻州市| 沂南县| 保山市| 盱眙县| 额济纳旗| 泽州县| 中西区|