【发布时间】:2014-03-14 01:13:45
【问题描述】:
下面的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(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);
}
为什么在动画完成之前onComplete函数被放入堆栈?
如果我从 onComplete 轨道函数调用中删除参数,它会进入方法,但由于没有给出参数而给我一个错误
我尝试通过单独的函数运行它,例如 function inBetween(1,2,3) { orbit(1,2,3); },但该方法不起作用(如我所料)
我需要这样做的原因是,如果我将所有电子放在同一个 TweenLite 上,它们将等待其他电子完成。由于我有负面延误,这对我来说是不可接受的
Here's a demo 供你玩,如果你愿意的话
您对如何解决这种情况有任何想法吗?
【问题讨论】:
-
为什么要使用负延迟?看来您应该将其设置为 1。
-
@JamesBlack 负延迟是为了抵消电子,因此看起来不太同步
标签: javascript stack stack-overflow method-chaining gsap