Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 样式更改后强制在Chrome中重新绘制/重新渲染_Javascript_Google Chrome - Fatal编程技术网

Javascript 样式更改后强制在Chrome中重新绘制/重新渲染

Javascript 样式更改后强制在Chrome中重新绘制/重新渲染,javascript,google-chrome,Javascript,Google Chrome,我试图转换网页上20x20表格中每个单元格的背景色 (这是更复杂的东西的简化版本) 这是我迄今为止的尝试: // Changes the color of each cell function changeTableColor() { for(let i=0; i<20; i++){ for(let j=0; j<20; j++){ if( meetsCriteria(i, j) ){ // Chang

我试图转换网页上20x20表格中每个单元格的背景色

(这是更复杂的东西的简化版本) 这是我迄今为止的尝试:

// Changes the color of each cell
function changeTableColor() {
    for(let i=0; i<20; i++){
        for(let j=0; j<20; j++){

            if( meetsCriteria(i, j) ){
                // Change the cell's class to set a new background color
                $('#cell'+i+'-'+j).removeClass('old');
                $('#cell'+i+'-'+j).addClass('new');
            }
        }
    }
    alert('Done changing colors');
}
//更改每个单元格的颜色
函数changeTableColor(){

对于(设i=0;i您可以使用
.queue()
$.map()
.promise())
按顺序调用函数。请参阅,您可以强制同步回流,但不能重新绘制。您必须摆脱for循环,并将其转换为异步循环函数。@guest271314,我不确定jquery的实现,但默认堆栈是在浏览器重新绘制之前执行的(在chrome中,因为在FF中,它甚至在显示
警报()
的弹出窗口之前执行)。@kaido不确定您的意思?
。然后()
链接到
。在调用
数组中的每个函数之前,不应调用promise(“queueName”)
。当()
可以放置在数组中;
。然后()
链接到
。promise(“queueName”)
在最后一次函数调用后立即被调用。“我的目标是让单元格一次可见地改变一个,以便您可以看到它们从左上到右下的变化”。如果要求
警报()
留在代码中。@guest271314这就是我的意思:在chrome上打开它,你会看到承诺执行是在重新绘制页面之前完成的。我知道应该删除该警报,但这是停止js执行并查看重新绘制何时真正发生的好方法。甚至,chrome在执行所有js之后以某种方式延迟重新绘制,并且将承诺视为js流的一部分,就像它是同步的一样。您可以使用
.queue()
$.map()
.promise()
按顺序调用函数。请参阅,您可以强制同步回流,但不能重新绘制。您必须摆脱for循环,并将其转换为异步循环函数。@guest271314,我不确定jquery的实现,但默认堆栈是在浏览器重新绘制之前执行的(在chrome中,因为在FF中,它甚至在显示
警报()
的弹出窗口之前执行)。@kaido不确定您的意思?
。然后()
链接到
。在调用
数组中的每个函数之前,不应调用promise(“queueName”)
。当()
可以放置在数组中;
。然后()
链接到
。promise(“queueName”)
在最后一次函数调用后立即被调用。“我的目标是让单元格一次可见地改变一个,以便您可以看到它们从左上到右下的变化”。如果要求
警报()
留在代码中。@guest271314这就是我的意思:在chrome上打开它,你会看到承诺执行是在重新绘制页面之前完成的。我知道应该删除该警报,但这是停止js执行并查看重新绘制何时真正发生的好方法。甚至,chrome在执行所有js之后以某种方式延迟重新绘制,并且将承诺视为js流的一部分,就像它是同步的一样。