3 回答

TA贡献1848条经验 获得超2个赞
您需要从 changeColor() 函数中取出 setInterval() 函数。您正在为每个后续的 changeColor() 递归调用创建一个新的间隔,这就是导致速度加快直到我们变得癫痫的原因。加上其他人提到的更具体的选择器('.grid-container > div')。这可能以反应式风格更好地完成,而不是每秒循环遍历一组元素,但如果你刚刚接触 html/js/css,这是一个非常好的小测试。我可能会做更多这样的事情:
var r = Math.round(Math.random()*255);
var g = Math.round(Math.random()*255);
var b = Math.round(Math.random()*255);
var myTimer;
function startSwitching() {
myTimer = setInterval(changeColor, 1000);
}
function stopSwitching() {
clearInterval(myTimer);
}
function changeColor(){
for (const elem of document.querySelectorAll('.grid-container > div')) {
r = Math.round(Math.random()*255);
g = Math.round(Math.random()*255);
b = Math.round(Math.random()*255);
elem.style.backgroundColor = "rgb("+r+","+g+","+b+", 0.8)";
}
}
您需要小心使用间隔并确保自己清理干净,否则可能会使浏览器崩溃。另外,你并没有真正问一个问题,所以不清楚你到底想改变什么。

TA贡献1802条经验 获得超6个赞
加入document.querySelectorAll('.grid-container > div')
for循环,这样只有里面的divgrid-container
才会变色。

TA贡献1789条经验 获得超10个赞
document.querySelectorAll('div')实际上返回一个元素列表。为了更改样式,您需要遍历元素。这是您可以执行此操作的一种方法:
for (const elem of document.querySelectorAll('.grid-container > div')) {
r = Math.round(Math.random()*255);
g = Math.round(Math.random()*255);
b = Math.round(Math.random()*255);
elem.style.backgroundColor = "rgb("+r+","+g+","+b+")";
}
添加回答
举报