我需要帮助理解一个概念。javascript onkeydown

我需要帮助理解一个概念。javascript onkeydown,javascript,onkeydown,Javascript,Onkeydown,我用HTML和javascript制作了一个游戏。由于我是初学者,我不知道如何使物体“平滑”。我的意思是,我制造了一个物体,按下“on键”,它就会移动。问题是按键后会卡住1s,然后继续。 我搜索了一个答案,找到了我一直在寻找的东西(但我不理解代码和它是如何工作的,因为它包括$…之类的东西,我不熟悉) 函数moveLeft() { var-movementy=30; var x=document.getElementById(“ball”).offsetLeft; x=x-移动; document

我用HTML和javascript制作了一个游戏。由于我是初学者,我不知道如何使物体“平滑”。我的意思是,我制造了一个物体,按下“on键”,它就会移动。问题是按键后会卡住1s,然后继续。 我搜索了一个答案,找到了我一直在寻找的东西(但我不理解代码和它是如何工作的,因为它包括$…之类的东西,我不熟悉)

函数moveLeft()
{
var-movementy=30;
var x=document.getElementById(“ball”).offsetLeft;
x=x-移动;
document.getElementById(“ball”).style.left=x+“px”;
}
函数moveRight()
{
var-movementy=30;
var x=document.getElementById(“ball”).offsetLeft;
x=x+movementy;
document.getElementById(“ball”).style.left=x+“px”;
}
函数ballmoveup()
{
var移动=3;
var y=document.getElementById(“ball”).offsetTop;
y=y-运动;
document.getElementById(“ball”).style.top=y+“px”;
window.onkeydown=函数(事件)
{
如果((event.keyCode==39))
{
moveRight();
}
如果((event.keyCode==37))
{
左移();
}
}

如果(y一个大问题是在ballmoveup内设置事件侦听器,并且在间隔内每隔10毫秒调用一次函数本身,这意味着每10毫秒添加一个新的eventlistener

您应该将eventlistener函数移出ballmoveup

如果您想制作动画(简单方法),可以使用以下方法:

#ball {
  transition: left 0.4s;
}
此外,最好将游戏状态作为函数外的变量:

var left = 0;
因此,您不必每次都调用它(只需修改变量并设置左侧)


我在任何地方都看不到
$
。作为一般性评论,我强烈建议至少了解jQuery的基础知识(即
$
)-至少对于您打算在浏览器上运行的脚本而言。如果没有它,则开发将不必要地削弱您自己。
$
通常是一个JQuery关键字,它倾向于表示
这个
对象。听起来好像您在JQuery中找到了一些示例。我建议您研究JQuery,并可能将其集成到您的代码中(如果有)您正在尝试使用其他地方的代码片段,或者只是将JQuery转换为JavaScript。对于后者,您可以(也应该)在此处包含您不理解的代码。此外,您可能应该包含完整的代码,以便可以复制。事实上,没有太多帮助。您可以在
id=“ball”上应用css
element..然后添加一些代码,以便在按键时重置事件循环,使其在按键时发生,而不是在下一个循环时发生iteration@AndrzejDoyle我绝对不同意这一点。学习如何使用本机javascript操作DOM并不需要很长时间,如果您了解它在较低级别上的工作方式,那么您就会知道它是什么正如您所建议的,我将eventlistener移出了函数(我忘记了它在脱离函数时“一般”工作)我无法将转换合并到我的代码中,但这很好,因为我不介意它每次都以100px的速度移动,我只需要按钮以恒定的速度移动它,而不是一个滴答声,1s等待,然后很多滴答声将在将来尝试你的最后建议。
var left = 0;
document.getElementById("ball").offsetLeft;