javascript - 使用箭头键在另一个 div 中移动一个 div
问题描述
我是 JavaScript 新手,所以我遇到了一些困难。我想用箭头键在另一个更大的 div 中移动一个小 div - 向左、向上、向右和向下。我有下面的代码,但它不能正常工作。
HTML 和 CSS
<div id="rectangle">
<div id="square"></div>
</div>
#rectangle {
width: 320px;
height: 200px;
border: 1px solid;
margin: auto;
position: relative;
}
#square {
width: 40px;
height: 40px;
background-color: deepskyblue;
position: absolute;
left: 0;
top:0;
}
Javascript
var rectangle = document.getElementById("rectangle");
var square = document.getElementById("square");
var currentPositionX = 0;
var currentPositionY = 0;
function moveSquare(event) {
if (event.keyCode == 37) {
currentPositionX -= 40;
square.style.left = currentPositionX + 'px';
if (currentPositionX <= 0) {
currentPositionX += 40;
}
}
if (event.keyCode == 38) {
currentPositionY -= 40;
square.style.top = currentPositionY + 'px';
if (currentPositionY <= 0) {
currentPositionY += 40;
}
}
if (event.keyCode == 39) {
currentPositionX += 40;
square.style.left = currentPositionX + 'px';
if (currentPositionX >= 280) {
currentPositionX -= 40;
}
}
if (event.keyCode == 40) {
currentPositionY += 40;
square.style.top = currentPositionY + 'px';
if (currentPositionY >= 160) {
currentPositionY -= 40;
}
}
}
document.onkeydown = moveSquare;
解决方案
我测试了代码,发现当你靠近边界时它不能正常工作(也许这是最初的问题?)。在此我测试了另一个更简单的解决方案:我只是将您的 moveSquare 函数更改为仅在您在界限内时才起作用(我的意思是,您不应该总是增加/减少位置,然后检查您是否超出界限来纠正它)。
function moveSquare(event) {
if (event.keyCode == 37) {
if (currentPositionX > 0) {
currentPositionX -= 40;
square.style.left = currentPositionX + 'px';
}
}
if (event.keyCode == 38) {
if (currentPositionY > 0) {
currentPositionY -= 40;
square.style.top = currentPositionY + 'px';
}
}
if (event.keyCode == 39) {
if (currentPositionX < 280) {
currentPositionX += 40;
square.style.left = currentPositionX + 'px';
}
}
if (event.keyCode == 40) {
if (currentPositionY < 160) {
currentPositionY += 40;
square.style.top = currentPositionY + 'px';
}
}
}
这是jsfiddle:https ://jsfiddle.net/epL4a9Lq/
请下次更具体地说明您的错误(我会在回答之前对此发表评论,但我对此还没有声誉)。
希望这可以帮助!
推荐阅读
- java - 应用程序安装失败 安装失败并显示消息 Failed to finalize session : INSTALL_PARSE FAILED MANIFEST MALFORMED
- c++ - 如何在 C++ OpenCV 中使用 OutputArrayOfArrays
- go - Golang模板函数返回空白页
- visual-studio-code - VS Code 中的“在文件中搜索”
- javascript - 如何使最小高度为 300 像素的 ng-bootstrap 轮播响应?
- scala - scala spark数据框爆炸很慢-因此,替代方法-从列中的数组创建列和行
- c - 如何调试 Lua 扩展随机段错误
- objective-c - Objective-C:最小的 init 与调用 initWith 的 init?
- r - 如何根据另一个向量的值范围获取向量的值范围?
- python - 出现运行时错误,但实际操作成功执行