Колориметрия, печать и препресс: технологии Главная Форум Галерея Контакты Download Статьи
Сражаясь неустанно,
доживём мы, Санчо,
до Золотого века!
 

Форум колористов и полиграфистов

Колориметрия и печать: технологии
 
Текущее время: 20:08, Чт, 03 дек 2020

Часовой пояс: UTC+03:00


Новые
ответы
в темах:



Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 20:29, Чт, 22 окт 2020 
Не в сети
Администратор

Зарегистрирован: 16:58, Ср, 18 авг 2004
Сообщения: 1032
Откуда: Москва
Обычные циклы яваскрипта типа for не позволяют обновить интерфейс в браузере до тех пор, пока сценарий не будет просчитан до конца.
Мне нужно было на тяжелую функцию мультиинтерполяции навесить 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>
Работающий код можно посмотреть по ссылке: https://jsfiddle.net/wzp34d90/
Обратите внимание на комменты по тексту, где мы вставляем те вычисления, которые нужны до активации progress, где размещаем код, работающий во время динамического обновления progress, и где размещаем код, который должен выполниться после окончания обновления progress.
Чтобы заменить цикл for на данный псевдоцикл, указываем конечное число цикла в переменной iterationsPR и начальное число цикла в переменной counterPR.
На скринах progress в реальном бою на странице https://cielab.xyz/spectralcalc_en.php


Вложения:
Комментарий к файлу: progress в Firefox
[ attachment ]
gradusnikFF.png [ 11.95 КБ | 121 просмотр ]
Комментарий к файлу: progress в Chrome
[ attachment ]
gradusnik.png [ 14.76 КБ | 121 просмотр ]
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

© CIELab.XYZ
Создано на основе phpBB® Forum Software © phpBB Limited
Конференция запущена 18 августа 2004 года | Защищено от спама системой stopforumspam
Всего посещений - 7701232 | Всего за день - 1265 | Уникальных сегодня - 314, вчера - 457, позавчера - 357