Javascript,切换setInterval

dam*_*mon 2 javascript setinterval clearinterval

我正在尝试制作一个小脚本,屏幕每100毫秒随机改变它的背景颜色,你可以通过按一个按钮来打开和关闭它.我可以开始,但我无法阻止它.

这是切换的主要代码:

var on = -1;

function change() {
    on = on*-1;
    if (on == true) {
        var light = window.setInterval(disco,100);
    }
    else {
        window.clearInterval(light);
    }
}
Run Code Online (Sandbox Code Playgroud)

disco 是改变背景颜色的功能.

我尝试了很多不同的变化,但我认为这是我得到的最接近的.尽管on变量在1和-1之间正确切换,但现在单击该按钮仅设置另一个间隔.我没有正确使用clearInterval吗?

完整的JSFiddle在这里:http://jsfiddle.net/VZdk9/

我正在尝试练习JavaScript,所以请不要jQuery :)

nul*_*ity 7

您的变量存在范围问题,light因为它是在change()函数内定义的.为了跟踪间隔ID,您需要使其成为全局变量.

var light;

function change() {
    if (!light) {
        light = window.setInterval(disco,100);
    } else {
        window.clearInterval(light);
        light = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也删除了你的变量,on因为它可能的值-1,1并且都是真实的.你真的只需要使用一个变量,因为如果已经清除了间隔,light它将被重置为null.如果此变量由另一个函数控制,请随意更改它.


For*_*ord 5

var light = null;
function change () {
    if (light === null) {
        light = window.setInterval(disco, 100);
    } else {
        window.clearInterval(light);
        light = null;
    }
}
Run Code Online (Sandbox Code Playgroud)