解决键盘在控制box加速移动时的卡顿问题

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
    #box1{
    	width: 100px;
    	height: 100px;
    	position: absolute;
    	background-color: red;
    }
	</style>
	<script type="text/javascript">
	//为document绑定一个按键按下的事件
     window.onload=function(){
     	//设置一个变量,来表示移动的速度
     	var speed = 10;
     	//创建一个变量来表示方向
     	//通过修改dir来改变box1的移动方向
     	var dir = 0;
     	/*
     	 * 因为onkeydown同时控制速度,又控制移动时间所以会出现卡顿
     	 * 开启一个定时器,来控制div的移动
     	 */
         setInterval(function(){
         	switch(dir){
         		case 37:
         		box1.style.left = box1.offsetLeft - speed+"px";
         		break;
         		case 38:
         		box1.style.top= box1.offsetTop - speed+"px";
         		break;
         		case 39:
         		box1.style.left = box1.offsetLeft + speed+"px";
         		break;
         		case 40:
         		box1.style.top = box1.offsetTop + speed + "px";
         		break;
         	}
         },30)
         document.onkeydown = function(event){
         	var box1 = document.getElementById("box1");
         	event = event||window.event;
         	
         	// console.log(event.keyCode);
         	/*
         	输出的左键是37,上是38,右是39,下是10
         	 */
         	if(event.keyCode){
         		speed = 100;//设置按着ctrl再按方向键就是加速
         	}else{
         		speed = 10;
         	}
         	dir=event.keyCode;
         	//当案件松开时,div不再有移动
         	document.onkeyup = function(){
         		dir = 0;
         	}
         }
     }

	</script>
</head>
<body>
	<div id="box1"></div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值