js&html.按键触发事件
非常简单的一个东西,但是太菜了所以写得比较臃肿。/**对比两个列表项是否相同(无序)*/
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==keysArray){
flags=true;
}
}
}
for(var i=ALength-1;i>=0;--i){
if(!flags)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();
}
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=;
}
else if(_keycode.constructor==Array){
keycode=_keycode;
}
for(var i=this.keysdownFF.length-1;i>=0;--i){
if(arrayCmp(this.keysdownFF,keycode)){
if(this.keysdownF==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;
i++;
}
if(!flag){
// 有新的按键按下
this.downingKeyCodes=e.keyCode;
for(i=this.keysdownFF.length-1;i>=0;--i){
if(arrayCmp(this.keysdownFF,this.downingKeyCodes)){
this.keysdownF.call(this.FElement,e);
}
}
}
else{
for(i=this.keysdownFF.length-1;i>=0;--i){
if(arrayCmp(this.keysdownFF,this.downingKeyCodes)&&!this.keysdownF.keepFlag){
this.keysdownF.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){
this.downingKeyCodes.splice(i,1);
if(this.keysupF)this.keysupF.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=_event;
}
else{
thisKeyNotbook.setDKeyFunc(_keycode,_event);
thisKeyNotbook.keysdownF.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;
}
else{
thisKeyNotbook.removeDKeyFunc(_keycode,_event);
}
}
}
页:
[1]