【发布时间】:2021-11-02 00:56:39
【问题描述】:
我仍在学习 JavaScript 的基础知识,目前正在学习 eventListeners。我正在尝试制作一个按钮,单击该按钮将整个主体的背景颜色更改为一些随机生成的 rgb 代码,每 100 毫秒,再次单击它时,背景颜色变回白色并停止颜色变化。
我用 setTimeout 做了一个循环。单击按钮时,会生成随机 rgb 值并将其应用于主体背景颜色。我使用了一个布尔标志,当再次单击按钮时,它被分配了假值,这会在检查 if 条件时停止循环。我面临的问题是事件侦听器无法单击一次以上。
代码如下:
const button = document.querySelector('#btn');
var flag = true;
button.addEventListener('click', function() {
loop();
})
function makeRGB() {
const r = Math.floor(Math.random() * 255);
const g = Math.floor(Math.random() * 255);
const b = Math.floor(Math.random() * 255);
const colorID = `rgb(${r},${g},${b})`;
document.body.style.backgroundColor = colorID;
}
function loop() {
if (!flag) {
return;
}
makeRGB();
setTimeout(loop, 100);
button.onclick = function stop() {
flag = false;
document.body.style.backgroundColor = 'white';
}
}
h1 {
text-align: center;
}
button {
margin: auto;
display: block;
}
<h1 id="heading">Welcome!</h1>
<button id="btn">Change Color! </button>
【问题讨论】:
-
您从未将
flag设置回 true。请注意,您还重置了onclick事件处理程序并每 100 毫秒添加一个新的超时。您应该考虑改用setTimeout(makeRgb, 100);。
标签: javascript dom-events addeventlistener