无限设置间隔,即使它应该已经清除

Infinite setInterval even though it should've cleared?

本文关键字:清除 设置 无限      更新时间:2023-09-26

为什么 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);
        }

尝试替换

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

context.globalAlpha > 0.95

toFixed 将您的值转换为字符串,这不是您想要的。

所以,基本上当你有:

i = setInterval(function () {

i未定义。就像在里面一样,它甚至不存在。所以当你到达这部分时

clearInterval(i);

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

所以

var i = setInterval(function () {

应该解决你的问题