javascript - 如何在运行密集的 JavaScript 时更新 DOM?

标签 javascript dom-events

我正在编写 JavaScript,它正在为一个项目计数到一定数量。数量可能在 100,000 左右,完成处理大约需要 10-15 秒。 我希望脚本在用户调用页面时立即运行,并在脚本完成时进行重定向。 是否可以在运行时暂停 10 毫秒以更新 DOM 以提供诸如“仍在工作”之类的反馈?

我想避免使用 jQuery,在这种情况下网络 worker 不是一个选项。 我意识到这不是真实世界的应用程序!

编辑:添加了一些代码作为示例:

在头部:

function myCounter (target) {
    var t = target;
    var count = 0;
    while (t != count){
        if (t == count) {
        window.location.replace("http://example.com"); // redirect
        }
    count++;
    }
}

在正文中:

<script>myCounter(100000);</script>

最佳答案

在大多数浏览器中,JavaScript 和 UI 在同一个线程中运行。您可以使用 setTimeout(或 setInterval)将线程返回给浏览器。

var myNumber = 0;
updateNumber();

function updateNumber(){
    // do heavy work for great good, ideally divided into smaller chunks

    document.getElementById('updateDiv').innerHTML = 'still working, up to ' + myNumber;

    if(myNumber < limit) {
      setTimeout(updateNumber, 20);
    }
}

有关一般过程的更多详细信息,这个答案值得一读:https://stackoverflow.com/a/4575011/194940

关于javascript - 如何在运行密集的 JavaScript 时更新 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15126618/

相关文章:

javascript - 观察者无法与 Vuex 一起使用

javascript - 如何一个接一个地放置一个盒子?

javascript - setTimeout 在无限循环中不起作用

JavaScript PreventDefault 不起作用,也不返回 false;

javascript - 类型错误 : document. getElementById(...);在 JavaScript 中为 null

javascript - Android 自定义事件转 Javascript EventListener

javascript - ng-bind-html 和 ng-bind-html-unsafe 不起作用?

javascript - table.columns 不是 datatable.js 中的函数

javascript - 将 eventListener 添加到复选框

javascript - 使用 Angular 页面滚动事件