javascript - HTML 进度元素未更新

标签 javascript jquery html

这是一个困扰我一段时间的问题。我已经实现了一个 HTML5 progress 元素,如下所示:

      <progress id="progress" value="0" max="100"></progress><output class="percent" id="percent">0</output><span class="prozent">%</span>

假设我在 JS 循环中更新 progresspercent 的值:

  i = 0;
  pBar = document.getElementById('progress');
  pBar.value = i;//start at 0%
  percent = 1;//set target for next progress bar update in %
  //DO
  do {
    //IF(i > i_max) EXIT
    //CALL VERLET
    VERLET(i, x, v, a, time, const0, gamma, A_o, omega, dt);
    x_plot[i] = [time[i], x[i]];
    v_plot[i] = [time[i], v[i]];
    a_plot[i] = [time[i], a[i]];
    //i = i + 1
    i = i + 1;
    if (parseInt(i / i_max * 100, 10) === percent) {
      pBar.value = percent;//update progress bar
      document.getElementById('percent').innerHTML = percent;
      percent = percent + 1;
    }
  //END DO
  } while (i < i_max);

这是我的脚本的相关部分。 请假设所有变量均已正确声明和初始化,并且整个脚本已检查完毕。可以在 here 找到该页面的草稿。 .

我不明白为什么 progressoutput 元素的值直到计算完成后才更新。或者这就是看起来正在发生的事情。 IE11(?)似乎在最初加载页面时显示一些更新,但在不重新加载的情况下再次不会更新新计算的进度条。

Here是类似的东西,但不使用这种现代方法。我尝试获取 this工作的例子,但没有成功。 This例如,尽管我认为写得更好,但可能会阐明问题。

是不是超时的问题?有没有我可以使用的简单 jQuery 方法?对此问题的任何反馈将不胜感激。

最佳答案

您无法在单个 while 循环中执行此类操作。

发生的情况是循环将一直运行直到结束,并且您只能在完成操作时看到结果。

对于此类问题,您应该采用异步方式。

function updateDom() {
  // do stuff

  setTimeout(updateDom, 500);
}

setTimeout(updateDom, 500);

关于javascript - HTML 进度元素未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821961/

相关文章:

javascript - 如何使用 ReactJs 中的键从父组件打开子组件模式

javascript - AngularJS 在加载时选择一个空选项

javascript - 为什么我不能将函数直接传递给 replace 方法?

jquery - 使用jQuery将rel添加到youtube链接中:包含

jquery - 外部+内联样式与仅外部样式

javascript - 通过短路赋值获取对象的属性

javascript - 在应用 jquery.chosen 时,使用 jquery.validate 验证选择字段时会出现错误

javascript - 添加可折叠的侧边栏

html - 媒体查询适用于 Firefox 但不适用于 Chrome

javascript - 使用 Javascript 保存 HTML 文件的方法