【键盘事件】简单实现键盘控制元素移动

1.简单布局

设置一个div,作为控制的对象
<div id="ok"></div>
简单给一下样式
<style>
	*{
		padding: 0;
		margin: 0;
	}
	#ok{
		width: 100px;
		height: 100px;
		background-color: hotpink;
		position: absolute;
		left: 200px;
		top: 200px;
	}
</style>
JS部分
//获取元素
var dOk = document.getElementById("ok");

加入下边这段代码,就会发现,元素的运动很不自然,第一下动之后会停止一下然后再继续移动,而且不能斜着走

window.onkeydown = function(e){
		var l = dOk.offsetLeft;

 - List item

		var t = dOk.offsetTop;
		if(e.keyCode === 37){
			l -=5;
		}
		else if(e.keyCode === 38){
			t -=5;
		}
		else if(e.keyCode === 39){
			l +=5;
		}
		else if(e.keyCode === 40){
			t +=5;
		}
		else{
			return ;
		}
		dOk.style.left = l + 'px';
		dOk.style.top = t + 'px';
	}	

那怎么优化这个代码,我们可以设置一个计时器,通过计时器实现元素的移动,让元素每隔一段事件执行一次函数,就可以解决上述问题

var isLeft = false;
var isTop = false;
var isRight = false;
var isBottom = false;
var timer = null;

//键盘事件只修改状态
window.onkeydown = function(e){
	if(e.keyCode === 37){
		isLeft = true;
	}
	else if(e.keyCode === 38){
		isTop = true;
	}
	else if(e.keyCode === 39){
		isRight = true;
	}
	else if(e.keyCode === 40){
		isBottom = true;
	}
}
window.onkeyup = function(e){
	if(e.keyCode === 37){
		isLeft = false;
	}
	else if(e.keyCode === 38){
		isTop = false;
	}
	else if(e.keyCode === 39){
		isRight = false;
	}
	else if(e.keyCode === 40){
		isBottom = false;
	}
}


//通过计时器实现移动
timer = setInterval(function(){
	var l = dOk.offsetLeft;
	var t = dOk.offsetTop;
	if(isLeft){
		l -=5;
	}
	if(isTop){
		t -=5;
	}
	if(isRight){
		l +=5;
	}
	if(isBottom){
		t +=5;
	}
	l = l < 0 ? 0 : (l > window.innerWidth -					 dOk.offsetWidth ? window.innerWidth - dOk.offsetWidth : l);
	t = t < 0 ? 0 : (t > window.innerHeight - dOk.offsetHeight ? window.innerHeight - dOk.offsetHeight : t);
	dOk.style.left = l + 'px';
	dOk.style.top = t + 'px';
},30)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值