完成通话后的无限循环功能 - 为什么?

时间:2013-09-06 14:06:50

标签: javascript tween tweenmax

我目前有一个提交按钮, - 点击后我会调用一次函数showPreloadIcon()。从这里开始,我基本上会显示一个预加载覆盖,循环显示几条消息。

我的问题是,当preloadText()从{

}调用时,似乎会发出无限通话
function preloadNextMessage() {
    indexMessage++;

    preloadText();
}

如果我发表评论,我不会发现任何问题。然而,当被调用时,似乎将preloadMessageFadeOut()置于无限循环中 - 任何想法?

整个代码:

var createUserPreloadMessages = new Array("Creating your user", "Message 2", "Message 3", "Message 4");

var indexMessage = 0;

function showPreloadIcon() {

    TweenMax.to($("#preloadIcon"), 0.5, {autoAlpha: 1});

    preloadText();
}


function preloadText() {
    $("#preloadText").css({
            visibility: "hidden"
    });

    $("#preloadText").html(createUserPreloadMessages[indexMessage]);

    TweenMax.to($("#preloadText"), 0.5, {delay: 1, autoAlpha: 1, onComplete:preloadMessageFadeOut()});
}

function preloadMessageFadeOut() { 

    TweenMax.to($("#preloadText"), 0.5, {top: "10px", delay: 3, autoAlpha: 0, onComplete:preloadNextMessage()});  
}

function preloadNextMessage() {
    indexMessage++;

    preloadText();
}

2 个答案:

答案 0 :(得分:2)

猜测,preloadMessageFadeOut()实际上调用了函数然后将onComplete设置为返回值 - 什么都没有。删除括号会将onComplete设置为函数对象。对于preloadNextMessage()调用也一样。

答案 1 :(得分:1)

您需要传递函数引用作为回调(即,在传递回调函数时不要使用括号)。通过在回调中包含括号,您将在延迟之前执行它们,这会导致无限循环:

TweenMax.to($("#preloadText"), 0.5, {delay: 1, autoAlpha: 1, onComplete:preloadMessageFadeOut});

TweenMax.to($("#preloadText"), 0.5, {top: "10px", delay: 3, autoAlpha: 0, onComplete:preloadNextMessage});