Javascript 为什么浏览器中的重新绘制会延迟?
我有一个没有背景色的Javascript 为什么浏览器中的重新绘制会延迟?,javascript,Javascript,我有一个没有背景色的div,然后我想更改背景色两次。这是我的密码: function runForSeconds(second) { var start = +new Date(); while (start + second * 1000 > (+new Date())) {} } var el = document.getElementById("foo"); el.style.backgroundColor = "blue"; // do some "long
div
,然后我想更改背景色两次。这是我的密码:
function runForSeconds(second) {
var start = +new Date();
while (start + second * 1000 > (+new Date())) {}
}
var el = document.getElementById("foo");
el.style.backgroundColor = "blue";
// do some "long running" task
runForSeconds(10);
el.style.backgroundColor = "red";
在两次背景颜色变化之间,我运行了很长一段时间
但当我运行页面时,我看不到背景变成蓝色,页面10秒后无法响应,背景直接变成红色
为什么会这样?如何修复此问题?JavaScript(通常)与渲染在同一线程中运行。因此,当JavaScript繁忙时,不会发生渲染
因此,在您的情况下,当代码运行时,当您通过runForSeconds()
函数阻塞JavaScript时,不会发生任何渲染
延迟某些代码执行的一种更干净的方法是使用,它不会阻塞线程,从而使渲染(以及整个浏览器)对用户输入做出响应
var el = document.getElementById("foo");
el.style.backgroundColor = "blue";
setTimeout( function(){
el.style.backgroundColor = "red";
}, second * 1000 );
JavaScript(通常)与渲染在同一线程中运行。因此,当JavaScript繁忙时,不会发生渲染
因此,在您的情况下,当代码运行时,当您通过runForSeconds()
函数阻塞JavaScript时,不会发生任何渲染
延迟某些代码执行的一种更干净的方法是使用,它不会阻塞线程,从而使渲染(以及整个浏览器)对用户输入做出响应
var el = document.getElementById("foo");
el.style.backgroundColor = "blue";
setTimeout( function(){
el.style.backgroundColor = "red";
}, second * 1000 );
JavaScript(通常)与渲染在同一线程中运行。因此,当JavaScript繁忙时,不会发生渲染
因此,在您的情况下,当代码运行时,当您通过runForSeconds()
函数阻塞JavaScript时,不会发生任何渲染
延迟某些代码执行的一种更干净的方法是使用,它不会阻塞线程,从而使渲染(以及整个浏览器)对用户输入做出响应
var el = document.getElementById("foo");
el.style.backgroundColor = "blue";
setTimeout( function(){
el.style.backgroundColor = "red";
}, second * 1000 );
JavaScript(通常)与渲染在同一线程中运行。因此,当JavaScript繁忙时,不会发生渲染
因此,在您的情况下,当代码运行时,当您通过runForSeconds()
函数阻塞JavaScript时,不会发生任何渲染
延迟某些代码执行的一种更干净的方法是使用,它不会阻塞线程,从而使渲染(以及整个浏览器)对用户输入做出响应
var el = document.getElementById("foo");
el.style.backgroundColor = "blue";
setTimeout( function(){
el.style.backgroundColor = "red";
}, second * 1000 );