Javascript 如何使用参数调用方法本身,而不发生堆栈溢出
由于函数调用自身,下面的GSAP代码无法工作,因此会无限循环并填满堆栈Javascript 如何使用参数调用方法本身,而不发生堆栈溢出,javascript,stack,stack-overflow,method-chaining,gsap,Javascript,Stack,Stack Overflow,Method Chaining,Gsap,由于函数调用自身,下面的GSAP代码无法工作,因此会无限循环并填满堆栈 var electrons = document.querySelectorAll('.electron'), paths = document.querySelectorAll('.path'), startDuration = 2; for(var i = 0; i < electrons.length; i++) { var myDelay = -(i * 0.5); orbit(el
var electrons = document.querySelectorAll('.electron'),
paths = document.querySelectorAll('.path'),
startDuration = 2;
for(var i = 0; i < electrons.length; i++) {
var myDelay = -(i * 0.5);
orbit(electrons[i], paths[i], myDelay);
}
function orbit(electron, path, delay) {
TweenLite.to(electron, startDuration, {rotationY:'-360', ease:Linear.easeNone,
onComplete: orbit(electron, path, delay)}, delay);
TweenLite.to(path, startDuration, {rotationZ:'360', ease:Linear.easeNone},
delay);
}
var electrons=document.querySelectorAll('.electron'),
路径=document.querySelectorAll('.path'),
起始持续时间=2;
对于(var i=0;i
为什么在动画完成之前将onComplete
函数放入堆栈中?
如果我从onComplete
orbit函数调用中删除参数,它将进入该方法,但会给我一个错误,因为没有给出任何参数
我试着通过一个单独的函数来运行它,例如函数在(1,2,3){orbit(1,2,3);}
之间,但是这个方法不起作用(正如我所期望的那样)
我之所以需要这样做,是因为如果我把所有的电子放在同一个TweenLite
上,它们会等待其他电子完成。因为我有消极的延迟,这对我来说是不可接受的
如果你愿意,可以和你一起玩
你对如何解决这个问题有什么想法吗?如果希望
onComplete
成为一个函数,请尝试以下方法:
TweenLite.to(electron, startDuration, {
rotationY:'-360',
ease:Linear.easeNone,
onComplete: function(){
orbit(electron, path, delay);
}
},delay);
没有任何错误,但没有循环。有什么想法吗?@Zachsauier:在
轨道(电子、路径、延迟)前发出警报代码>检查是否被调用。它确实被调用。事实上,它每两秒钟重复一次。那一定是我的函数有问题,我需要重置它,我需要的onComplete
函数是onComplete:function(){elem.restart();}
。谢谢你的帮助!为什么要使用负延迟?看起来你应该把它设为1。@JamesBlack负延迟是为了抵消电子,使它看起来不那么同步