为什么我的页面会同时呈现?
Why does my page get rendered all at once?
我的理解是事件循环会变得有点复杂。我对 JavaScript 和整个网络还很陌生,所以对我来说更复杂。但是,我使用网格布局在屏幕上制作了一个网格。我只想用红色填充每个框,但我希望看到这种填充发生。相反发生的是循环被计算,然后所有东西都被同时渲染。我怎样才能让它看起来像某种动画?也许指向一些资源,这样我就可以读到这个?我搜索了事件循环、循环和渲染,但发现了太多信息。提前致谢!
for(let i = 1; i < 100; i += 2){
setTimeout(() =>{
const squareElement = document.querySelector('.grid :nth-child('+i+')');
console.log('.grid:nth-child('+i+')');
squareElement.style.backgroundColor = 'red';
}, 2000 );
}
这是我的代码。如您所见,我什至设置了一个 setTimeout,这样我就可以一个一个地渲染。
您的代码没有按照您的预期执行。您期望您的代码 运行,等待 2 秒,重复 99 次。
for 1 to 100
update one element to be red
wait 2 seconds
相反,您的代码在等待 2 秒后将自己排队 运行 100 次。
wait 2 seconds
for 1 to 100
update one element to be red
一个解决方案是 运行 你的更新元素函数,并在执行结束时,在 2 秒后再次排队到 运行。一旦它修改了所有 100 个元素,不再将自己设置为 运行。
function updateElement(i) {
const squareElement = document.querySelector('.grid :nth-child('+i+')');
console.log('.grid:nth-child('+i+')');
squareElement.style.backgroundColor = 'red';
// if there are more elements to update, run again after 2 seconds.
if(i < 100) {
setTimeout(()=>updateElement(++i),2000);
}
}
// start the function after 2 seconds.
setTimeout(()=>updateElement(0),2000);
我的理解是事件循环会变得有点复杂。我对 JavaScript 和整个网络还很陌生,所以对我来说更复杂。但是,我使用网格布局在屏幕上制作了一个网格。我只想用红色填充每个框,但我希望看到这种填充发生。相反发生的是循环被计算,然后所有东西都被同时渲染。我怎样才能让它看起来像某种动画?也许指向一些资源,这样我就可以读到这个?我搜索了事件循环、循环和渲染,但发现了太多信息。提前致谢!
for(let i = 1; i < 100; i += 2){
setTimeout(() =>{
const squareElement = document.querySelector('.grid :nth-child('+i+')');
console.log('.grid:nth-child('+i+')');
squareElement.style.backgroundColor = 'red';
}, 2000 );
}
这是我的代码。如您所见,我什至设置了一个 setTimeout,这样我就可以一个一个地渲染。
您的代码没有按照您的预期执行。您期望您的代码 运行,等待 2 秒,重复 99 次。
for 1 to 100
update one element to be red
wait 2 seconds
相反,您的代码在等待 2 秒后将自己排队 运行 100 次。
wait 2 seconds
for 1 to 100
update one element to be red
一个解决方案是 运行 你的更新元素函数,并在执行结束时,在 2 秒后再次排队到 运行。一旦它修改了所有 100 个元素,不再将自己设置为 运行。
function updateElement(i) {
const squareElement = document.querySelector('.grid :nth-child('+i+')');
console.log('.grid:nth-child('+i+')');
squareElement.style.backgroundColor = 'red';
// if there are more elements to update, run again after 2 seconds.
if(i < 100) {
setTimeout(()=>updateElement(++i),2000);
}
}
// start the function after 2 seconds.
setTimeout(()=>updateElement(0),2000);