无限setInterval即使它应该被清除?

时间:2014-12-10 01:52:43

标签: javascript canvas setinterval

为什么setInterval不会自行清除它?...每个循环globalAlpha都是0.1以上。然而,即使它在1处停止递增。循环仍在继续?

我的完整代码,位于文件的底部:https://github.com/GunZi200/Memory-Colour/blob/master/test.js

function secondCanvasFirst(){
    //if (collides(secondCanvas, exx, eyy)) {
    console.log("true");
    var j = 0, 
    i = setInterval(function () {
        context.globalAlpha = j;
        context.fillStyle = '#F8F8FF';
        context.fillRect(0, 0, x, y);
        j += 0.1;
        console.log(context.globalAlpha);
        if (context.globalAlpha.toFixed(0) === 1) {
            clearInterval(i);
            userTurn = true;
            b_canvas.addEventListener('click', clickEvent, false);
            alert("hi");
            second = true;
            game_interface();
        }
    }, 100);
}
        var clickEvent1 = function clickEvent1(e) {
            new FastClick.attach(document.body);
            console.log("clickevent1");
            exx = e.offsetX;
            eyy = e.offsetY;
            secondCanvasFirst();
        }

        if (b_canvas && b_canvas.getContext) {
            b_canvas.addEventListener('click', clickEvent1, false);
            FastClick.attach(document.body);
        }

2 个答案:

答案 0 :(得分:3)

尝试替换

context.globalAlpha.toFixed(0) === 1 

context.globalAlpha > 0.95

toFixed将您的值转换为String,这不是您想要的。

答案 1 :(得分:1)

所以,基本上当你有:

i = setInterval(function () {

i未定义。如同,它甚至不存在。所以当你到达这个部分时

clearInterval(i);

它说,i?那是什么?现在我认为JS有一些能力可以导出i是一个变量,但是我猜这是因为你将它传递给另一个内部函数,那就是问题出现的地方发挥作用。

所以

var i = setInterval(function () {

应解决您的问题