我正在尝试制作一个小脚本,屏幕会每100毫秒随机改变它的背景颜色,你可以通过按一个按钮来打开和关闭它。我可以开始,但我无法阻止它。
以下是切换的主要代码:
var on = -1;
function change() {
on = on*-1;
if (on == true) {
var light = window.setInterval(disco,100);
}
else {
window.clearInterval(light);
}
}
disco
是更改背景颜色的功能。
我尝试了很多不同的变体,但我认为这是我最接近的。尽管on
变量在1和-1之间正确切换,但现在单击该按钮仅设置另一个间隔。我没有正确使用clearInterval吗?
完整的JSFiddle在这里:http://jsfiddle.net/VZdk9/
我正在尝试练习JavaScript,所以请不要jQuery:)
答案 0 :(得分:6)
您的变量light
存在范围问题,因为它是在change()
函数中定义的。为了跟踪区间ID,您需要将其设为全局变量。
var light;
function change() {
if (!light) {
light = window.setInterval(disco,100);
} else {
window.clearInterval(light);
light = null;
}
}
我还删除了您的变量on
,因为其可能的值-1
和1
都是truthy。您真的只需要使用一个变量,因为如果已经清除了间隔,light
将被重置为null
。如果此变量由另一个函数控制,可以随意更改它。
答案 1 :(得分:3)
var light = null;
function change () {
if (light === null) {
light = window.setInterval(disco, 100);
} else {
window.clearInterval(light);
light = null;
}
}