javascript setInterval动画循环不循环

时间:2015-10-09 06:49:10

标签: javascript setinterval

我知道这有很多变种,但我无法弄清楚为什么这个不循环。它只运行一次segmentConstruction。

        var timer;           
        timer = setInterval(segmentConstruction(multipointCoords,whaleTime), 1000);

        function segmentConstruction(multipointCoords,whaleTime){

            console.log(multipointCoords[0][0]);
            console.log(whaleTime[0][0]);
            console.log(i);

            if (i > 10) {
                clearInterval(timer);
            }
            else {
                i++;
                timer;
            };
        };

3 个答案:

答案 0 :(得分:0)

因为setInterval(segmentConstruction(multipointCoords,whaleTime), 1000);与:

相同
var t = segmentConstruction(multipointCoords,whaleTime);
setInterval(t, 1000);

从IE10开始,您可以:

setInterval(segmentConstruction, 1000, multipointCoords, whaleTime);

答案 1 :(得分:0)

你不应该以这种方式传递函数参数。

您可以在匿名函数中调用函数带参数 此解决方案适用于所有浏览器:

timer = setInterval(function() {
    segmentConstruction(multipointCoords,whaleTime);
}, 1000);

function segmentConstruction(coords, time)
{
    // ...
}

此方法仅用于不带参数的函数

timer = setInterval(segmentConstruction, 1000);

function segmentConstruction()
{
    // ...
}

答案 2 :(得分:0)

这是因为在启动间隔时,segmentConstruction函数会调用一次。 有两种方法可以解决它:

  1. 将setConstruction包装成setInterval结构中的闭包,如下所示:

    setInterval(function(){segmentConstruction(multipointCoords,whaleTime);},1000);

  2. segmentConstruction应该返回闭包:

    function segmentConstruction(multipointCoords,whaleTime){
        return function () {
            console.log(multipointCoords[0][0]);
            console.log(whaleTime[0][0]);
            console.log(i);
    
            if (i > 10) {
                clearInterval(timer);
            }
            else {
                i++;
                timer;
            }
        };
    }