Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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 为什么浏览器中的重新绘制会延迟?_Javascript - Fatal编程技术网

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