В настоящее время я выполняю некоторые упражнения с JavaScript (проблемы Эйлера) и решил попробовать идею создания индикатора выполнения для проблем, которые используют вложенные циклы и занимают несколько секунд. Это просто изображение пустого индикатора выполнения, расположенного под полным, с функцией JavaScript, которая периодически меняет ширину полосы.Javascript - манипулирование DOM при выполнении вычислений
Однако это изменение не происходит до тех пор, пока все вычисления не будут завершены. JavaScript накладывает манипуляции DOM на удержание, когда он выполняет вычисления? Если это так, есть ли простой способ обойти это?
Вот код, который я запускаю.
JavaScript код:
function updateProgress(calc){
var recorded_calculations = 90357988; //(pre-recorded number)
var percent = (calc/recorded_calculations) * 100;
document.getElementById("full-bar").style.width = percent + "%";
if(percent == 100){
return;
}
setTimeout(function(){
updateProgress(calculations);
}, 1);
}
var calculations = 0;
updateProgress(calculations);
for(lots of increments){
calculations++;
//Logic here
for(lots of increments and){
calculations++;
//Logic here
И CSS код:
#background-bar{
position: absolute;
top: 0px;
left: 0px;
z-index: 1;
width: 100%;
}
#full-bar{
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
width: 0%;
overflow: hidden;
}
Удалите 'setTimeout()' и поместите 'updateProgress (вычисления)' где у вас '// Logic here'. – Tigger