|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
非常简单的一个东西,但是太菜了所以写得比较臃肿。
- /**对比两个列表项是否相同(无序)*/
- function arrayCmp(CArray,keysArray){
- if(CArray&&keysArray){
- if(CArray.length!=keysArray.length)
- return false;
- var ALength=CArray.length;
- var flags=Array(ALength)
- for(var i=ALength-1;i>=0;--i){
- for(var j=ALength-1;j>=0;--j){
- if(CArray[i]==keysArray[j]){
- flags[i]=true;
- }
- }
- }
- for(var i=ALength-1;i>=0;--i){
- if(!flags[i])return false;
- }
- return true;
- }
- }
- /**按键记录器key notbook*/
- function keyNB(){
- this.FElement;
- this.downingKeyCodes=[];
- this.keysdownF =[]; //function
- this.keysdownFF =[]; //function flag
- this.keysupF={};
- }
- keyNB.prototype={
- // 添加按键事件
- setDKeyFunc:function(keycode,func){
- if(!keycode||!func){
- return -1;
- }
- if(keycode.constructor==Number){
- this.keysdownFF.push([keycode]);
- }
- else if(keycode.constructor==Array){
- this.keysdownFF.push(keycode);
- }
- this.keysdownF.push(func);
- },
-
- // 移除按键事件
- removeDKeyFunc:function(_keycode,func){
- var keycode;
- if(!_keycode||!func){
- return -1;
- }
- if(_keycode.constructor==Number){
- keycode=[_keycode];
- }
- else if(_keycode.constructor==Array){
- keycode=_keycode;
- }
- for(var i=this.keysdownFF.length-1;i>=0;--i){
- if(arrayCmp(this.keysdownFF[i],keycode)){
- if(this.keysdownF[i]==func){
- this.keysdownF.splice(i,1);
- this.keysdownFF.splice(i,1);
- break;
- }
- }
- }
- },
- /**按下新按键*/
- setKey:function(e){
- var flag=false;
- var i=0;
- var downingKALength=this.downingKeyCodes.length;
- if(downingKALength)
- for(var j=downingKALength-1;j>=0;--j){
- if(flag)break;
- flag=e.keyCode==this.downingKeyCodes[j];
- i++;
- }
- if(!flag){
- // 有新的按键按下
- this.downingKeyCodes[i]=e.keyCode;
- for(i=this.keysdownFF.length-1;i>=0;--i){
- if(arrayCmp(this.keysdownFF[i],this.downingKeyCodes)){
- this.keysdownF[i].call(this.FElement,e);
- }
- }
- }
- else{
- for(i=this.keysdownFF.length-1;i>=0;--i){
- if(arrayCmp(this.keysdownFF[i],this.downingKeyCodes)&&!this.keysdownF.keepFlag){
- this.keysdownF[i].call(this.FElement,e);
- }
- }
- }
- },
- /**抬起按键*/
- removeKey:function(e){
- var flag=false;
- var downingKALength=this.downingKeyCodes.length;
- if(downingKALength)
- for(var i=downingKALength-1;i>=0;--i){
- if(e.keyCode==this.downingKeyCodes[i]){
- this.downingKeyCodes.splice(i,1);
- if(this.keysupF[e.keyCode.toString()])this.keysupF[e.keyCode.toString()].call(this.FElement,e);
- return 0;
- }
- }
- },
- reNB:function(){
- this.downingKeyCodes=[];
- }
- }
- /**
- * 添加按键事件
- * @param {Document} _Element
- * @param {Boolean} _keepFlag 是否重复触发事件
- * @param {Number||Array} _keycode 用数组表示组合键
- * @param {Function} _event
- * @param {Boolean} _type flase=>down;true=>up
- */
- function addKeyEvent(_Element,_keepFlag,_keycode,_event,_type){
- var thisKeyNotbook;
- if(!_Element.keyNotbook){
- _Element.keyNotbook=new keyNB();
- thisKeyNotbook=_Element.keyNotbook;
- thisKeyNotbook.FElement=_Element;
- _Element.addEventListener("keydown" ,function(e){thisKeyNotbook.setKey(e)});
- _Element.addEventListener("keyup" ,function(e){thisKeyNotbook.removeKey(e)});
- _Element.addEventListener("blur" ,function(e){thisKeyNotbook.reNB()});
- }
- else{
- thisKeyNotbook=_Element.keyNotbook;
- }
- if(_type){
- thisKeyNotbook.keysupF[_keycode.toString()]=_event;
- }
- else{
- thisKeyNotbook.setDKeyFunc(_keycode,_event);
- thisKeyNotbook.keysdownF[thisKeyNotbook.keysdownF.length-1].keepFlag=_keepFlag;
- }
- }
- /**
- * 移除按键事件
- * @param {Document} _Element
- * @param {Number||Array} _keycode
- * @param {Function} _event
- * @param {} _type flase=>down;true=>up
- */
- function removeKeyEvent(_Element,_keycode,_event,_type){
- if(_Element.keyNotbook){
- var thisKeyNotbook=_Element.keyNotbook;
- if(_type){
- delete thisKeyNotbook.keysupF[_keycode.toString()];
- }
- else{
- thisKeyNotbook.removeDKeyFunc(_keycode,_event);
- }
- }
- }
复制代码 |
|