Функция бесконечного цикла после незавершенного вызова - почему?
В настоящее время у меня есть кнопка отправки,- при нажатии я вызываю функцию 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().