gpt4 book ai didi

javascript - 第一次单击时,圆圈会突然改变位置并进行 a 或 w 移动

转载 作者:行者123 更新时间:2023-12-02 22:22:01 25 4
gpt4 key购买 nike

我有一个圆圈,我想用 WASD 移动它。到目前为止,我已经让它工作了,但是第一个 A 或 W 运动会突然而不是平滑地改变圆圈位置(你会在 jsfiddle 中明白我的意思)。当我按 D(或 S)而不是 A 时,它会将圆圈发射到无处可去。按 A 和 W 1 次后,它会按预期工作。我需要有人可以解决突然的移动,使其变得更平滑,谢谢。

注意:尽量保持简单(如果你能做到的话),这样我就可以轻松理解它。

https://jsfiddle.net/CarelessInternet/vkau9085/ (忽略颜色)

HTML 代码:

<html>
<body>
<div id="circle"></div>
</body>
</html>

一些 JS 代码(请参阅 jsfiddle 了解所有代码):

var up = false,
down = false,
left = false,
right = false,
x = document.getElementById("circle").style.left,
y = document.getElementById("circle").style.top,
div = document.getElementById("circle");

document.addEventListener('keydown', press);
function press(e) {
if (e.which == 87) {
up = true;
} else if (e.which == 65) {
left = true;
} else if (e.which == 83) {
down = true;
} else if (e.which == 68) {
right = true;
}
}

document.addEventListener('keyup', release);
function release(i) {
if (i.which == 87) {
up = false;
} else if (i.which == 65) {
left = false;
} else if (i.which == 83) {
down = false;
} else if (i.which == 68) {
right = false;
}
}

一些 CSS 代码:

#circle {
width: 100px;
height: 100px;
border-radius: 50%;
border: 5px solid white;
background-color: black;
position: fixed;
left: 220px;
top: 125px;
overflow: auto;
}

最佳答案

尝试在声明 x 和 y 的值后立即在控制台中记录它们,您会发现问题:它们不是数字。它们是空字符串,当强制转换为数字时,它们会转换为 0。例如,您的初始 x - 5 返回 -5。这是因为 HTMLElement.style 仅提供内联样式值,而不是根据 CSS 样式表计算的值。

要获取计算样式,您可以使用window.getCompulatedStyle;这仍然返回一个字符串,例如“220px”,因此您需要使用 parseFloat 转换为数字:

var computedStyle = window.getComputedStyle(document.getElementById("circle")),
x = parseFloat(computedStyle.left),
y = parseFloat(computedStyle.top);

关于javascript - 第一次单击时,圆圈会突然改变位置并进行 a 或 w 移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com