jquery рекурсивная функция для нерекурсивной функции

0

я сожалею, что этот вопрос может быть одним из тех "глупых вопросов". У меня есть этот круглый прогресс, который отлично работает, когда я нажимаю кнопку с именем "animateButton". Но я хочу запустить progressbar с вызовом функции, но функция не имеет имени, потому что он рекурсивный в панели progress, я думаю. Как заставить функцию запускать процесс, когда я вызываю функцию вроде этого startIt()?.

      $(function() {
      var $topLoader = $("#topLoader").percentageLoader({width: 60, height: 60, controllable : true, progress : 0.0, onProgressUpdate : function(val) {
          $topLoader.setValue(Math.round(val * 100.0));
        }});

      var topLoaderRunning = false;
      $("#animateButton").click(function() {
        if (topLoaderRunning) {
          return;
        }
        topLoaderRunning = true;
        $topLoader.setProgress(0);
        $topLoader.setValue('0kb');
        var kb = 0;
        var totalKb = 500; //100=2.7 1000=27

        var animateFunc = function() {
          kb += 1;
          $topLoader.setProgress(kb / totalKb);
          $topLoader.setValue(kb.toString() + 'kb');

          if (kb < totalKb) {
            setTimeout(animateFunc, 25);
          } else {
            topLoaderRunning = false;
          }
        }

        setTimeout(animateFunc, 25);

      });
    });      

Я работал так просто:

     startLoader = function() {
    var $topLoader = $("#topLoader").percentageLoader({width: 60, height: 60,    controllable : true, progress : 0.0, onProgressUpdate : function(val) {
  $topLoader.setValue(Math.round(val * 100.0));
      }});

   var topLoaderRunning = false;
if (topLoaderRunning) {
  return;
}
topLoaderRunning = true;
$topLoader.setProgress(0);
$topLoader.setValue('0kb');
var kb = 0;
var totalKb = 500; //100=2.7 1000=27

var animateFunc = function() {
  kb += 1;
  $topLoader.setProgress(kb / totalKb);
  $topLoader.setValue(kb.toString() + 'kb');

  if (kb < totalKb) {
    setTimeout(animateFunc, 25);
  } else {
    topLoaderRunning = false;
  }
}

setTimeout(animateFunc, 25);

   };
  • 0
    Не могли бы вы привести пример желаемого мышления? Как ваш код будет выглядеть с вашими требованиями?
  • 0
    это будет function1 () {...... startloader ();} --- startloader () {рабочий код загрузчика}
Теги:
function
recursion
progress-bar

2 ответа

0
Лучший ответ

У вас уже есть все части, вам просто нужно немного их переупорядочить. Дайте вашей функции имя, затем назначьте это имя событию клика. Затем вы можете явно вызвать функцию по имени в конце.

Неподтвержденный код ниже, но я использовал этот принцип много раз.

$(function() {
  var $topLoader = $("#topLoader").percentageLoader({width: 60, height: 60, controllable : true, progress : 0.0, onProgressUpdate : function(val) {
      $topLoader.setValue(Math.round(val * 100.0));
    }});

  var topLoaderRunning = false;

  var startIt = function() {
    if (topLoaderRunning) {
      return;
    }
    topLoaderRunning = true;
    $topLoader.setProgress(0);
    $topLoader.setValue('0kb');
    var kb = 0;
    var totalKb = 500; //100=2.7 1000=27

    var animateFunc = function() {
      kb += 1;
      $topLoader.setProgress(kb / totalKb);
      $topLoader.setValue(kb.toString() + 'kb');

      if (kb < totalKb) {
        setTimeout(animateFunc, 25);
      } else {
        topLoaderRunning = false;
      }
    }

    setTimeout(animateFunc, 25);

  };

  $("#animateButton").click(startIt);

  startIt();
});     
  • 0
    эй, спасибо, что я пробовал это раньше, но функция не вызывается, может быть, потому что она находится за пределами этой функции? Потому что мне нужно вызывать его вне загрузчика, и я не хочу animateButton, но я хочу, чтобы он выполнялся после чего-то в другой функции.
0

Если я правильно понял ваш вопрос, вам нужно что-то вроде этого:

$(function() {
  var $topLoader = $("#topLoader").percentageLoader({width: 60, height: 60, controllable : true, progress : 0.0, onProgressUpdate : function(val) {
      $topLoader.setValue(Math.round(val * 100.0));
    }});

  var topLoaderRunning = false;
  var startIt = function() {
    // function body...
  };
  $("#animateButton").click(startIt);
});

Вы всегда можете назначать функции переменным, если вам нужно получить к ним доступ по имени.

  • 0
    Объявление функции также может использоваться вместо присваивания и выражения функции.
  • 0
    эй, спасибо, что я пробовал это раньше, но функция не вызывается, может быть, потому что она находится за пределами этой функции? Потому что мне нужно вызывать его вне загрузчика, и я не хочу animateButton, но я хочу, чтобы он выполнялся после чего-то в другой функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню