Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在没有设置间隔的情况下更改循环的正时_Javascript_Jquery_Cycle_Timing - Fatal编程技术网

Javascript 在没有设置间隔的情况下更改循环的正时

Javascript 在没有设置间隔的情况下更改循环的正时,javascript,jquery,cycle,timing,Javascript,Jquery,Cycle,Timing,我试图解决这个问题: 通过创建我自己的缩放动画功能 我尝试了递归解决方案,但问题仍然存在,它会立即解决,而且我根本看不到任何动画 function RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top) { //var I = StartSize ; var SSpx = "" , LeftPx="" , TopPx=""; LeftPx = (Left)+Unit;

我试图解决这个问题:

通过创建我自己的缩放动画功能

我尝试了递归解决方案,但问题仍然存在,它会立即解决,而且我根本看不到任何动画

function RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top)
{   
    //var I = StartSize ;
    var SSpx = "" , LeftPx="" , TopPx="";

    LeftPx = (Left)+Unit; 
    TopPx = (Top)+Unit;


    if(StartSize < EndSize)
    {       
            StartSize+=2;

            SSpx = StartSize+Unit;

            if(Left!=0) LeftPx = (Left-StartSize)+Unit;
            if(Top!=0)  TopPx = (Top-StartSize)+Unit;

            $(Elements).css({'width': SSpx,'height': SSpx});
            $(Elements).css({'left' : LeftPx , 'top' : TopPx});

            setTimeout(RelativeCornerResizer(Elements , StartSize , EndSize , Unit , Left , Top),50);
    }

}
您可以在另一个超时函数中使用setTimeout来继续循环。例如:

function timeoutLoopFunction() {
  ... do animation stuff here for one frame ...

  // Now queue up the same update again for another
  // update if the animation is not finished yet
  if (shouldHaveAnotherFrame) {
    // Change the hardcoded 50 to a variable one that changes
    // over time if necessary.
    setTimeout(timeoutLoopFunction, 50);
  }
}

// Start the animation by calling the function.
timeoutLoopFunction();
这并没有达到您期望的效果

setTimeout需要字符串或函数引用作为第一个参数

但这里没有传递引用,而是调用函数RelativeCornerResizer,以便立即执行它,并且只有返回值nothing传递给setTimeout…因此,一切都“同时”发生

您可以使用匿名函数绕过此问题:

setTimeout(
  function() {
    RelativeCornerResizer(Elements, …);
  },
  50
);

你的电脑在哪里?我所看到的只是一个阻塞循环,它冻结程序直到整个div被调整大小…setTimeout只重复它一次,我需要重复while直到div被调整大小,但每个循环都必须减速“我不能使用setInterval,因为函数在一个间隔后继续执行”–这就是clearInterval存在的原因…@CBroe我知道这一点,但我只需要在动画结束时执行它,我知道当startsize达到endsize时它就完成了,clearInterval需要setinterval id,但我需要用setinterval id输入clearInterval,只有在动画结束时。。。我不知道如何解释这个问题,我已经用ClearInterval试过了。你为什么要自己在这里用JS“编程”整个动画,而不是仅仅使用CSS转换或动画…?我会尝试这个解决方案,让你知道:D谢谢
setTimeout(
  function() {
    RelativeCornerResizer(Elements, …);
  },
  50
);