Javascript:翻译动画错误

Javascript:翻译动画错误,javascript,Javascript,我想用javascript创建一个空格invider: 我有一个函数可以获取宇宙飞船的位置:getstylevaiss,然后返回它(左边距),这样我就可以用这个函数定位导弹: function tir(event){ var actusizevaiss= getstylevaiss(); var missile=document.getElementById("missile"); if (event.which==38) { missile.st

我想用javascript创建一个空格invider:

我有一个函数可以获取宇宙飞船的位置:getstylevaiss,然后返回它(左边距),这样我就可以用这个函数定位导弹:

function tir(event){
    var actusizevaiss= getstylevaiss();
    var missile=document.getElementById("missile");
    if (event.which==38)
    {
        missile.style.marginLeft=actusizevaiss+"px";
        missile.style.bottom= "100px";
        missile.style.display="block"; // it was "none" before
        missile.style.position="absolute";
        while (parseInt(missile.style.bottom)<800) // while we are into the container
        {
        var animation = setInterval(tirer(),6000);
        }
          clearInterval(animation); 
    }
}

function getstylevaiss (){
    var vaiss= document.getElementById("vaisseau");
    var sizevaiss= vaiss.currentStyle ||window.getComputedStyle(vaiss);
    var actusizevaiss=parseInt(sizevaiss.marginLeft);
    return actusizevaiss;
}

当我使用setInterval(tier(),6000)时;导弹在一次内到达顶部,而不是液体(这就是问题所在)。但当我使用setInterval(tier,6000)时;Chrome会崩溃,我认为这是一个无限循环。

尝试使用更可靠的requestanimationframe:它的工作原理稍有不同,但它会修复您的非流体体验

也许从这里开始?(或谷歌)


尝试使用更可靠的requestanimationframe:它的工作原理稍有不同,但它会修复您的非流体体验

也许从这里开始?(或谷歌)


如果这行:
employee.style.bottom=parseInt(currt.bottom)+20+“px”
,是为对象设置动画的工具,而您的问题是它会一次性更改位置,而不是使其平稳运行,您需要在此处使用css转换

#missile
{
  transition: bottom 1s linear;
}
如果导弹覆盖的距离在不同情况下是不同的,那么这不是最可靠的方法,因为无论距离如何,现在导弹完成过渡总是需要1s。希望有帮助


是的,您应该使用
requestAnimationFrame()
,这比使用
setInterval()
要好得多,但我认为您当前的问题不是因为这一点。

如果这行:
导弹.style.bottom=parseInt(currt.bottom)+20+“px”
,是为对象设置动画的工具,而您的问题是它会一次性更改位置,而不是使其平稳运行,您需要在此处使用css转换

#missile
{
  transition: bottom 1s linear;
}
如果导弹覆盖的距离在不同情况下是不同的,那么这不是最可靠的方法,因为无论距离如何,现在导弹完成过渡总是需要1s。希望有帮助


是的,您应该使用
requestAnimationFrame()
,这比使用
setInterval()
要好得多,但我认为您当前的问题不是因为这个。

阅读我发布的文章。核心问题是,如果浏览器忙于做其他事情,它就不会按照您的时间间隔运行。因此,只有当浏览器决定执行setinterval函数时,您才能获得更新。使用animationframes可以让您有机会进行相应的编码。:-)如果你能帮我阅读我发布的文章,我无法在我的函数中使用它。核心问题是,如果浏览器忙于做其他事情,它就不会按照您的时间间隔运行。因此,只有当浏览器决定执行setinterval函数时,您才能获得更新。使用animationframes可以让您有机会进行相应的编码。:-)如果你能帮我的话,我无法在我的功能中使用它