基于关键代码的事件侦听器无法使用边距正确移动框
Key code based event listener doesn’t move box correctly, using margins
我编写的脚本有问题,该脚本允许 ID 为 me
的元素根据箭头键移动,但无论何时告诉它向左移动,它都会向右移动,当告诉它向右移动时它走对了,当被告知上升或下降时它不会移动。
这是脚本:
document.onkeydown = function(event) {
var kc = event.keyCode;
var me = document.getElementById('me');
me.innerHTML = kc;
var XPos = me.offsetLeft;
var YPos = me.offsetTop;
if (kc == '39') {
me.style.marginLeft = XPos++ + 'px';
}
if (kc == '37') {
me.style.marginLeft = XPos-- + 'px';
}
if (kc == '38') {
me.style.marginTop = YPos-- + 'px';
}
if (kc == '40') {
me.style.marginTop = YPos++ + 'px';
}
};
正在演示 this website。
你的代码有两个错误:
您正在尝试使用 marginLeft
/ marginTop
设置方框的位置 – 顾名思义,这会向 div 添加边距,即在它周围增加 space,从而将它朝您想要的相反方向移动;你应该简单地使用 left
和 top
通过使用例如XPos++
,你得到的是 XPos
的旧值,然后 然后 你增加了它的值;你应该使用 ++XPos
来代替,这样,在你使用它之前值会增加
这是您的代码的更新版本:
document.onkeydown = function(event) {
var kc = event.keyCode;
var me = document.getElementById('me');
me.innerHTML = kc;
var XPos = me.offsetLeft;
var YPos = me.offsetTop;
if (kc == '39') {
me.style.left = ++XPos + 'px';
}
if (kc == '37') {
me.style.left = --XPos + 'px';
}
if (kc == '38') {
me.style.top = --YPos + 'px';
}
if (kc == '40') {
me.style.top = ++YPos + 'px';
}
};
#me {
position: absolute;
left: 100px;
top: 100px;
width: 100px;
height: 100px;
background-color: blue;
}
<div id="me"></div>
参见 JSFiddle:https://jsfiddle.net/pahund/sovxsh22/
我编写的脚本有问题,该脚本允许 ID 为 me
的元素根据箭头键移动,但无论何时告诉它向左移动,它都会向右移动,当告诉它向右移动时它走对了,当被告知上升或下降时它不会移动。
这是脚本:
document.onkeydown = function(event) {
var kc = event.keyCode;
var me = document.getElementById('me');
me.innerHTML = kc;
var XPos = me.offsetLeft;
var YPos = me.offsetTop;
if (kc == '39') {
me.style.marginLeft = XPos++ + 'px';
}
if (kc == '37') {
me.style.marginLeft = XPos-- + 'px';
}
if (kc == '38') {
me.style.marginTop = YPos-- + 'px';
}
if (kc == '40') {
me.style.marginTop = YPos++ + 'px';
}
};
正在演示 this website。
你的代码有两个错误:
您正在尝试使用
marginLeft
/marginTop
设置方框的位置 – 顾名思义,这会向 div 添加边距,即在它周围增加 space,从而将它朝您想要的相反方向移动;你应该简单地使用left
和top
通过使用例如
XPos++
,你得到的是XPos
的旧值,然后 然后 你增加了它的值;你应该使用++XPos
来代替,这样,在你使用它之前值会增加
这是您的代码的更新版本:
document.onkeydown = function(event) {
var kc = event.keyCode;
var me = document.getElementById('me');
me.innerHTML = kc;
var XPos = me.offsetLeft;
var YPos = me.offsetTop;
if (kc == '39') {
me.style.left = ++XPos + 'px';
}
if (kc == '37') {
me.style.left = --XPos + 'px';
}
if (kc == '38') {
me.style.top = --YPos + 'px';
}
if (kc == '40') {
me.style.top = ++YPos + 'px';
}
};
#me {
position: absolute;
left: 100px;
top: 100px;
width: 100px;
height: 100px;
background-color: blue;
}
<div id="me"></div>
参见 JSFiddle:https://jsfiddle.net/pahund/sovxsh22/