Javascript 样式更改后强制在Chrome中重新绘制/重新渲染
我试图转换网页上20x20表格中每个单元格的背景色 (这是更复杂的东西的简化版本) 这是我迄今为止的尝试: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
// 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流的一部分,就像它是同步的一样。