javascript - 在资源昂贵的操作中强制重绘元素

标签 javascript jquery html browser

我有一些问题:

我有一个资源消耗大的操作(将元素生成到 DOM 中)。之前都是在start的时候才调用,但是当生成的元素很多的时候,页面就卡了几秒,元素无法点击等等。

所以我放了一个全屏显示元素生成的进度。但是浏览器(Ubuntu 14.04 上的 Chromium)以某种方式无法呈现进度。

类似代码(因为我的太长贴不上):

function generate() {
    var $content = $('#content'), $progress = $('#progress'), count = 0;
    for(var x = 1; x < 100; x++) {
        for(var y = 1; y < 100; y++) {
            $content.append('<span>' + x + '-' + y + '</span>'); // adding an element into DOM
            $progress.html('Generated elements: ' + count++ );
    }
}

元素生成正确,但生成元素的数量没有变化(保持为 0,这是 HTML 代码中的默认值)。

有没有办法强制浏览器重新绘制 $progress 元素?

最佳答案

这是未经测试的,但应该让你非常接近你想要的。

   function generate() {
        var $content = $('#content'), $progress = $('#progress'), count = 0;
        for(var x = 1; x < 100; x++) {
            for(var y = 1; y < 100; y++) {
                (function(x, y) {
                        setTimeout(function() { 
                             $content.append('<span>' + x + '-' + y + '</span>');
                             $progress.html('Generated elements: ' + count++ );
                        }, Math.min(x + y, 100));
                })(x, y);
            }
        }
    }

关于javascript - 在资源昂贵的操作中强制重绘元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195070/

相关文章:

javascript - 在列表之间绘制箭头

javascript - 如何在嵌入式 V8 中调试 javascript?

javascript - 通过 jquery 的表编辑器

单击时javascript更改类,保留css动画

jquery - 替换复杂标题中的样式表

Javascript - 使用 innerHTML 输出字符串 *WITHOUT* HTML 编码的特殊字符?

javascript - 为什么我要把 Math.floor 和 Math.random 结合起来?

javascript - 如何使用 isNaN 来检查输入是否为数字?

javascript - 如何根据对象属性值在下拉列表中选择值 - 选择和 Angular

html - 为任何浏览器(跨浏览器)在中心和左右定位 div