【问题标题】:Forcing repaint of element in resource-expensive operation在资源昂贵的操作中强制重新绘制元素
【发布时间】:2014-06-13 06:57:34
【问题描述】:

我有一些问题:

我有一个耗费资源的操作(将元素生成到 DOM 中)。之前我只是在启动时调用操作,但是当有很多元素要生成时,页面只是卡了几秒钟,有不可点击的元素等等。

所以我放了一个全屏显示元素生成的进度。但不知何故,浏览器(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 元素?

【问题讨论】:

标签: javascript jquery html browser


【解决方案1】:

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

   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);
            }
        }
    }

【讨论】:

  • 你能解释一下Math.min(x + y, 100) 部分吗?
  • 你可能不需要那个。老实说,100 可能会很好。你必须测试它。因为我没有对此进行测试,所以我想确保有一个偏移量,而且如果你改变你的循环最大值,你就不会等待几秒钟(或几分钟)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2011-03-21
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多