实现滑块的控制移动
按住上下左右使滑块向对应的方向移动。
效果:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<style>
#box1{
height: 100px;
width: 100px;
background-color:red;
position: absolute;
}
</style>
<script>
window.onload = function(){
var box1 = document.getElementById("box1");
document.onkeydown = function(event){
event = event || window.event;
// alert(event.keyCode);
// 37,38,39,40
var speed = 10;
// 按住ctrl键加速
if(event.ctrlKey){
speed = 50;
}
switch(event.keyCode){
case 37:
// alert("向左");
box1.style.left = box1.offsetLeft - speed + "px";
break;
case 39:
// alert("向右");
box1.style.left = box1.offsetLeft + speed + "px";
break;
case 38:
// alert("向上");
box1.style.top = box1.offsetTop - speed + "px";
break;
case 40:
// alert("向下");
box1.style.top = box1.offsetTop + speed + "px";
break;
}
}
}
</script>
</head>
<body>
<div id="box1">
</div>
</body>
</html>
问题:为了防止误操作,设计按键时,如果第一个和第二个键按的是同一个键,那么就会产生一个停顿。
这样div在移动的过程中就不是很顺畅。
解决: 一直开启定时器
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<style>
#box1{
height: 100px;
width: 100px;
background-color:red;
position: absolute;
}
</style>
<script>
window.onload = function(){
var box1 = document.getElementById("box1");
var speed = 10;
var div = 0;//方向
setInterval(function(){
switch(dir){
case 37:
// alert("向左");
box1.style.left = box1.offsetLeft - speed + "px";
break;
case 39:
// alert("向右");
box1.style.left = box1.offsetLeft + speed + "px";
break;
case 38:
// alert("向上");
box1.style.top = box1.offsetTop - speed + "px";
break;
case 40:
// alert("向下");
box1.style.top = box1.offsetTop + speed + "px";
break;
}
},30);
document.onkeydown = function(event){
event = event || window.event;
// 按住ctrl键加速
if(event.ctrlKey){
speed = 50;
}else{
speed =10;
}
dir = event.keyCode;
};
document.onkeyup = function(){
dir = 0;
};
};
</script>
</head>
<body>
<div id="box1">
</div>
</body>
</html>