1

我目前有一个提交按钮,单击时我调用了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();
}
4

2 回答 2

2

猜测一下,preloadMessageFadeOut() 实际上当时调用了该函数并将 onComplete 设置为返回值 - 什么都没有。删除括号会将 onComplete 设置为函数对象。preloadNextMessage() 调用相同。

于 2013-09-06T14:12:08.610 回答
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}); 
于 2013-09-06T14:14:28.310 回答