Мне нужно было на тяжелую функцию мультиинтерполяции навесить progress, потому что функция может считать и по минуте, очень тяжелая математика, когда размерностей у интерполируемых данных не 2 а 5.
В результат не без помощи товарища сработала следующая функция. Здесь цикл for длительного выполнения у себя в коде я заменил на псевдоцикл function IterationFunction () и все сработало:
Код: Выделить всё
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8">
<script type="text/javascript">
function move() {
//here calc before progress
var iterationsPR = Math.random() * 1000;
document.raz.rand.value = iterationsPR.toFixed(0);
var progressMaxPR = iterationsPR;
var progressPercentPR = 0;
var counterPR = 0;
(function IterationFunction () { //вместо цикла for
//here first calc start at counterPR = 0, calc with dynamic progress
counterPR++;
progressPercentPR = (counterPR / progressMaxPR * 100).toFixed(1);
document.getElementById("progressbar").value = progressPercentPR;
if (counterPR < iterationsPR) {
setTimeout(IterationFunction, 0);
} else {
//here next calc after progress and End function here
} //else counter
})(); //end counter, next is nothing
} //end function
</script>
<title>Progress bar</title>
</head>
<body>
<form name="raz">
<input type="button" onclick="move();" value="Click Me" />
<br /><br />
<label>Индикация выполнения: </label><progress id="progressbar" value="0" max="100" style="width:300px; height:8px;"></progress>
<br><br>
<input name="rand" type="text" value="0" size="5" /> random speed
</form>
</body>
</html>
Обратите внимание на комменты по тексту, где мы вставляем те вычисления, которые нужны до активации progress, где размещаем код, работающий во время динамического обновления progress, и где размещаем код, который должен выполниться после окончания обновления progress.
Чтобы заменить цикл for на данный псевдоцикл, указываем конечное число цикла в переменной iterationsPR и начальное число цикла в переменной counterPR.
На скринах progress в реальном бою на странице https://cielab.xyz/spectralcalc_en.php