1

現在、送信ボタンがあります。クリックすると、関数showPreloadIcon()が1回呼び出されます。ここから、基本的に、いくつかのメッセージをループするプリロード オーバーレイを示します。

私の問題は、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

You need to pass a function reference as your callbacks (i.e., don't use parentheses when passing a callback function). By including parentheses on your callbacks, you are executing them before the delay, which is causing an infinite loop:

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 に答える