javascript - 为什么我的 div 元素没有根据我的移动功能移动?
问题描述
我试图通过让主体感知我按下的键按钮,找到正确的键符号 w、a、x、d,然后从 html 元素的 css 属性中减去或添加来移动我的 div 元素。
但是它不起作用,每当我控制台记录元素或其属性时,什么都不会出现。搬运工不会动。
var mover;
function moveDivBlock(e){
if ((e.keyCode == 69) ||(e.keyCode == 68)||(e.keyCode == 67)){//go right
moveBlock(mover,10,0);}
if ((e.keyCode == 81) ||(e.keyCode == 65)||(e.keyCode == 90)){//go left
moveBlock(mover,-10,0);}
if ((e.keyCode == 81) ||(e.keyCode == 87)||(e.keyCode == 69)){//go up
moveBlock(mover,0,10);}
if ((e.keyCode == 90) ||(e.keyCode == 88)||(e.keyCode == 67)){//go down
moveBlock(mover,0,-10);}
}
function handleKeyDown(e) {
moveDivBlock(e);
}
function moveBlock(elem, rightShift, upShift){
var curLeft = parseInt(elem.style.left);
var curTop = parseInt(elem.style.top);
elem.style.left = (curLeft + rightShift) + "px";
elem.style.top = (curTop - upShift) + "px";
}
window.onload=function(){
mover=document.getElementById("mover");
}
#mover{
position:absolute;
top:290px;
left:130px;
background-color:green;
width:50px;
height:50px;
border:2px solid black;
}
<body onkeydown="handleKeyDown(event);">
<div id="mover"></div>
</body>
解决方案
这不起作用的原因,elem.style.top
仅返回内联样式,而不是来自 css 文件的样式。要从 css 文件中获取样式,您需要使用getComputedStyle(elem)
. 请试试这个
function moveBlock(elem, rightShift, upShift){
var curLeft = parseInt(getComputedStyle(elem).left);
var curTop = parseInt(getComputedStyle(elem).top);
elem.style.left = (curLeft + rightShift) + "px";
elem.style.top = (curTop - upShift) + "px";
}
推荐阅读
- python - 如何将多索引 pandas DataFrame 写入 docx 文件
- javascript - JS中如何将混合类型的嵌套子对象转换为数组?
- design-patterns - 如何在 Elixir 中的进程之间共享状态?
- c++ - Msys2 编译 C++ 太慢
- python - 使用 Python 提取交互式地图数据
- r - R - NA 提交 mann-whitney u 测试
- javascript - 向上滚动时如何将一个div隐藏在另一个半透明的div后面
- html - 较小的分辨率使图像变小(bootstrap-5 Fluid)
- arduino - Thingsboard Arduino 客户端库问题
- swift - 在 Mac 上的 VSCode 中具有多个文件的 Swift 命令行程序