和用鼠标按住拖动一样,首先要获取div元素当前的left和top值,
提示: 获取非行内样式, 使用
document.defaultView.getComputedStyle(obj)["left"]
按下键盘的事件监听和给div添加不一样,按下键盘是通过keyCode判断有没有按下键盘。
e.keyCode的37,38,39,40分别对应左上右下,所以也要配合
switch case使用
具体代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
div {
width: 200px;
height: 200px;
background-color: orange;
position: absolute;
left: 200px;
top: 200px;
}
</style>
</head>
<body>
<div></div>
</body>
<script>
// 提示: 获取非行内样式, 使用`document.defaultView.getComputedStyle(obj)["left"]`
// 通过keyCode,判断按的上下左右的哪一个键
// 37 38 39 40对应左上右下
// 获取到left,再加上3px,就可以实现移动
var divTop = 0;
var divLeft = 0;
var div = document.querySelector("div");
// 按下键盘的时候,开始监听
// 按下键盘是通过keyCode来判断有没有按下键盘,这一点和div元素添加点击事件不一样
document.onkeydown = function (e) {
switch (e.keyCode) {
case 37 /* 左 */:
divLeft =
parseInt(document.defaultView.getComputedStyle(div)["left"]) -
3 +
"px";
div.style.left = divLeft;
break;
case 38 /* 上 */:
divTop =
parseInt(document.defaultView.getComputedStyle(div)["top"]) -
3 +
"px";
div.style.top = divTop;
break;
case 39 /* 右,右就是在左的基础上把减号改成加号 */:
divLeft =
parseInt(document.defaultView.getComputedStyle(div)["left"]) +
3 +
"px";
div.style.left = divLeft;
break;
case 40 /* 下,下就是在上的代码的基础上把减号改成加号 */ /* */:
divTop =
parseInt(document.defaultView.getComputedStyle(div)["top"]) -
3 +
"px";
div.style.top = divTop;
break;
}
};
</script>
</html>