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
);