JS键盘方向控制

<script>
//document.οnkeydοwn=keydown
//document.οnkeyup=keyup

var $=function(objId) {
    return document.getElementById(objId);
}

Array.prototype.remove=function(keypos)
 {
    var j=0;
    for(var i=0;i<this.length;i++)
     {
        if(this[i]!=keypos)
         {
            this[j]=this[i];
            j=j+1;
        }
        
    }
    this.pop();
}

function KeyControl()
 {
    this.Active=true;
    this.speed=10;
    this.timecontrol=50;
    this.KeyCode=new Array();
    this.a="aaa";
    this.ControlObject=new Array();
    this.obj=null;
    //alert(this.a);
    this.direct=new Array(this.top,this.left,this.right,this.down,this.topleft,this.downleft,this.topright,this.downright);
    //alert(this.direct[0].arrKey);
}

KeyControl.prototype= {
    
    top: {name:"top",arrKey:new Array('38'),xpos:"",ypos:"-"},
    left: {name:"left",arrKey:new Array('37'),xpos:"-",ypos:""},
    right: {name:"right",arrKey:new Array('39'),xpos:"+",ypos:""},
    down: {name:"down",arrKey:new Array('40'),xpos:"",ypos:"+"},
    topleft: {name:"topleft",arrKey:new Array('38','37'),xpos:"-",ypos:"-"},
    downleft: {name:"downleft",arrKey:new Array('37','40'),xpos:"-",ypos:"+"},
    topright: {name:"topright",arrKey:new Array('38','39'),xpos:"+",ypos:"-"},
    downright: {name:"downright",arrKey:new Array('39','40'),xpos:"+",ypos:"+"},
    nocontrol:"nocontrol"
    
}

KeyControl.prototype.keyup=function()
 {
    var keypos=event.keyCode;
    this.KeyCode.remove(keypos);
    //alert(this.KeyCode.length);
}



KeyControl.prototype.Add=function(objId)
 {
    this.ControlObject[this.ControlObject.length]=objId;
}

KeyControl.prototype.Remove=function(objId)
 {
    this.ControlObject.remove(objId);
}

KeyControl.prototype.Direct=function()
 {
    var stack=null;
    //alert(this.KeyCode.length);
    for(var i=this.KeyCode.length-1;i>=0;i--)
     {
        //alert(this.KeyCode.length);
        if(stack==null)
         {
            for(var j=0;j<4;j++)
             {
                //alert(this.direct[j].arrKey[0]);
                //alert(this.KeyCode[i]);
                if(parseInt(this.KeyCode[i])==parseInt(this.direct[j].arrKey[0]))
                 {
                    stack=this.direct[j].arrKey[0];
                    break;
                }
            }
        }
        else
         {
            for(var j=4;j<this.direct.length;j++)
             {
                for(var k=0;k<this.direct[j].arrKey.length;k++)
                 {
                    if(parseInt(this.KeyCode[i])==parseInt(this.direct[j].arrKey[k]))
                     {
                        if(k==0&&parseInt(stack)==parseInt(this.direct[j].arrKey[1]))
                         {
                            return this.direct[j];
                            break;
                        }
                        else if(k==1&&parseInt(stack)==parseInt(this.direct[j].arrKey[0]))
                         {
                            return this.direct[j];
                            break;
                        }
                    }
                }
            }
        }
    }
    if(stack!=null)
     {
        for(var j=0;j<4;j++)
             {
                if(parseInt(stack)==parseInt(this.direct[j].arrKey[0]))
                 {
                    return this.direct[j];
                    break;
                }
            }
    }
    else
     {
        return null;
    }
}

KeyControl.prototype.Move=function()
 {
    var _direct=this.Direct();
    
    
    if(_direct==null)
     {
        
        return false;
    }
    
    if(_direct.xpos.length>0)
     {
        if(_direct.xpos=="+")
         {
            var objNodes=this.ControlObject;
            for(var i=0;i<objNodes.length;i++)
             {
                if($(objNodes[i]).style.left=="")
                 {
                    $(objNodes[i]).style.left=0;
                }
                $(objNodes[i]).style.left=parseInt($(objNodes[i]).style.left)+5;                
            }
        }
        else
         {
            var objNodes=this.ControlObject;
            for(var i=0;i<objNodes.length;i++)
             {
                if($(objNodes[i]).style.left=="")
                 {
                    $(objNodes[i]).style.left=0;
                }
                $(objNodes[i]).style.left=parseInt($(objNodes[i]).style.left)-5;                
            }
        }
    }
    if(_direct.ypos.length>0)
     {
        if(_direct.ypos=="+")
         {
            //objNodes[i].top=parseInt(objNodes[i].style.top)+5;
            var objNodes=this.ControlObject;
            for(var i=0;i<objNodes.length;i++)
             {
                if($(objNodes[i]).style.top=="")
                 {
                    $(objNodes[i]).style.top=0;
                }
                $(objNodes[i]).style.top=parseInt($(objNodes[i]).style.top)+5;                
            }
        }
        else
         {
            var objNodes=this.ControlObject;
            for(var i=0;i<objNodes.length;i++)
             {
                if($(objNodes[i]).style.top=="")
                 {
                    $(objNodes[i]).style.top=0;
                }
                $(objNodes[i]).style.top=parseInt($(objNodes[i]).style.top)-5;                
            }
        }
    }
}

KeyControl.prototype.keydown=function()
 {
    var keypos=event.keyCode;
    var flag=true;
    for(var i=0;i<this.KeyCode.length;i++)
     {
        if(keypos==this.KeyCode[i])
         {
            flag=false;
            break;
        }
    }
    if(flag)
     {
        this.KeyCode[this.KeyCode.length]=keypos;
    }
    //alert(this.KeyCode.length);
    //objTemp.keydown.call(objTemp);
}

Function.prototype.bind=function()
 {
    var   self   =   this;   
   var   arg   =   arguments;   
   return   function() {   
   self.apply(null,arg);   
   }   
}

var objTemp=new KeyControl();
objTemp.Add("div1");
var f=function()
 {
    objTemp.keydown();
}

var f1=function()
 {
    objTemp.keyup();
}

f2=function()
 {
    objTemp.Move();
    window.setTimeout("f2()",200);
}

document.οnkeydοwn=f;
document.οnkeyup=f1;

f2();


</script>

<div id="div1" style="position:absolute;">lxy</div>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值