Функция бесконечного цикла после незавершенного вызова - почему?

В настоящее время у меня есть кнопка отправки,- при нажатии я вызываю функцию 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 ответа

Решение

Вам нужно передать ссылку на функцию в качестве функции обратного вызова (т. Е. Не использовать скобки при передаче функции обратного вызова). Включая скобки в ваши обратные вызовы, вы выполняете их до задержки, которая вызывает бесконечный цикл:

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

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

По предположению, preloadMessageFadeOut() фактически вызывает функцию тут же и устанавливает onComplete для возвращаемого значения - ничего. Снятие скобок установит onComplete вместо объекта функции. То же самое для вызова preloadNextMessage().

Другие вопросы по тегам