2011-11-22 3 views
0

Я пытаюсь обновить прогрессбар на основе одного двух переменных:Progressbar в JQuery-UI - Javascript

  • Начало бар у 'х' procent
  • 'X' минут идти до тех пор пока 100%

(http://jqueryui.com/demos/progressbar/)

до сих пор у меня есть это:

<script> 
$(function() { 
    var pGress = setInterval(function() { 
     var pVal = $('#progressbar').progressbar('option', 'value'); 
     var pCnt = !isNaN(pVal) ? (pVal + 1) : <?php echo $procent_finished; ?>; 
     if (pCnt > 100) { 
      clearInterval(pGress); 
     } else { 
      $('#progressbar').progressbar({value: pCnt}); 
      $('#progressbar1').progressbar({value: pCnt}); 
     } 
    },<?php echo $remaining_minutes; ?>); 
}); 
</script> 

«$ procent_finished» - это уже%, а «$ Остальные_минты» - оставшиеся минуты до 100%.

Пример:

Хочу бар, чтобы начать на 60% и от 1 минуты до достижения 100%.

  • procent_finished = 60
  • remaining_minutes = 600 (10 мин = 1 * 6 * 10, если я правильно ..)

Но когда я запускаю файл с этими переменными начинается действительно на 60%, но это уже закончилось до 100% через 25 секунд. (в то время как он должен быть завершен только до 100% через 1 минуту)

Я попытался найти несколько формул, чтобы получить правильное оставшееся время, но я действительно не могу понять это. Надеюсь, есть кто-нибудь, кто может мне помочь, потому что я больше ничего не знаю.

Заранее благодарен!

Редактировать: было бы лучше, если он обновляет индикатор прогресса каждую минуту, и он просто добавит количество%.

ответ

0

setInterval требует интервал в миллисекундах, вы устанавливаете интервал 600, который составляет 0,6 секунды. 1 минута будет 60000.

Таким образом, чтобы иметь функцию обновления бруски каждую минуту вы могли бы сделать это,

$(function() { 
var percentDone = <?php echo $procent_finished; ?>; 
var minute = 0; 
var percentIntervals = (100 - percentDone)/<?php echo $remaining_minutes; ?>; 

$('#progressbar').progressbar({value: percentDone}); 

var pGress = setInterval(function() { 
    var nVal = (percentIntervals) * (++minute) + percentDone; 
    if (nVal > 100) { 
     clearInterval(pGress); 
    } else { 
     $('#progressbar, #progressbar1').progressbar({value: nVal}); 
    } 
}, 60000); 
}); 

где remaining_minutes целое число, представляющее, сколько минут осталось.

http://jsfiddle.net/q4WqL/

+0

Большое спасибо! Это спасло мой день, отлично :) – user985911

+0

Я нашел одну проблему. Когда я использую эти переменные, индикатор прогресса иногда немного больше, когда вы открываете страницу во второй вкладке/окне. (и обновляет эту новую страницу позже, чем уже открытая страница). Я думаю, что это может произойти, когда $ still_minutes или $ procent_finished просто изменяются от значения при загрузке страницы. Любые мысли для возможного решения? (странно, что прогрессбары достигают 100% в одно и то же время, даже когда они запускались позже), но я изменил интервал на «1000», и использовал $ оставшиеся секунды вместо $ else_minutes. – user985911

+0

@ user985911 Я не уверен, в чем проблема, это должно произойти. Вы говорите, что когда вы загружаете страницу с разными начальными значениями, она действует иначе? – Andrew

Смежные вопросы