Javascript requestAnimationFrame在屏幕外移动图像时表现怪异

Javascript requestAnimationFrame在屏幕外移动图像时表现怪异,javascript,canvas,requestanimationframe,web-technologies,Javascript,Canvas,Requestanimationframe,Web Technologies,我有一个滑动的图片沿着屏幕慢慢移动。一旦它们离开屏幕,它们就背靠在丝带的后面。所以当你在网页上的时候,一切都很好,但是当你离开的时候,其中一张图片就出界了。它被放回了错误的地方。我想可能是requestAnimationFrame的问题,但我不知道是什么原因造成的 function tick(timePassed) { //dont worry about it area.tick(); //updates the imgs X position for (var i = 0; i < l

我有一个滑动的图片沿着屏幕慢慢移动。一旦它们离开屏幕,它们就背靠在丝带的后面。所以当你在网页上的时候,一切都很好,但是当你离开的时候,其中一张图片就出界了。它被放回了错误的地方。我想可能是requestAnimationFrame的问题,但我不知道是什么原因造成的

function tick(timePassed)
{
//dont worry about it
area.tick();
//updates the imgs X position
for (var i = 0; i < loadedImgs.length; i++)
{
    loadedImgs[i].x -= (timePassed * 10) / 1000;
    if (loadedImgs[i].x + loadedImgs[i].width <= 0)
    {
        loadedImgs[i].x = totalLength - loadedImgs[i].width;
    }
}
//updates there y position based on scroll wheel
dy -= dy * .1;
y += dy / 10;



}
守时

function renderLoop(time)
{
    var timePassed = time - lastRender;
    if (timePassed < 33) { window.requestAnimationFrame(renderLoop); return; }
     window.requestAnimationFrame(renderLoop);
     lastRender = time;
     tick(timePassed);
     update();

  }
函数renderLoop(时间)
{
var timePassed=time-lastdrender;
if(timePassed<33){window.requestAnimationFrame(renderLoop);return;}
requestAnimationFrame(renderLoop);
lastRender=时间;
勾选(时间流逝);
更新();
}

requestAnimationFrame
的浏览器选项卡失去焦点时将停止,因此当焦点返回时,
renderLoop
中的时间比您预期的要大得多


这会导致renderLoop假设经过了更长的时间,并且正在放弃重新定位。

requestAnimationFrame
将在浏览器选项卡失去焦点时停止,因此当焦点返回时,renderLoop中的时间比您预期的要大得多


这会导致renderLoop假设一个更大的时间已经过去,并且正在放弃您的重新定位。

requestAnimationFrame
将在浏览器选项卡失去焦点时停止,因此当焦点返回时,
renderLoop
中的
时间比您预期的要大得多。因此,IMG移动时,就好像时间已经过去,因为根据上一次记录的更改移动它们Post your Response,这样我就可以将其选中
requestAnimationFrame
的浏览器选项卡失去焦点时将停止,因此当焦点返回时,
renderLoop
中的
时间比您预期的要大得多。因此,IMG的移动就好像时间已经过去一样,因为我是基于时间移动它们的关于上次记录的变化,把你的答案贴出来,这样我可以核对一下
    function render()
    {
          //paints to main canvas
          ctx.clearRect(0, 0, width, 600);
          ctx.drawImage(b, 0, 0);
    }
function renderLoop(time)
{
    var timePassed = time - lastRender;
    if (timePassed < 33) { window.requestAnimationFrame(renderLoop); return; }
     window.requestAnimationFrame(renderLoop);
     lastRender = time;
     tick(timePassed);
     update();

  }