在JS函数内循环动画

时间:2015-04-15 10:30:59

标签: javascript arrays animation

有一个包含本地数组和循环的函数 以某种方式改变那些数组。函数返回 一个数组。示例如下:

function myFunc(expr) {
    var array1 = [],
        array2 = [];

    for (var i = 0; i < expr.length; ++i) {
    // ...
    }

    return array2;
};

我需要在每个循环步骤后在画布上画一个带DELAY的数组。

我的第一个想法是使用某种&#34;睡眠&#34;功能在循环结束时,但Google告诉我JS没有这种类型的功能。我不完全明白&#34; setInterval&#34;函数,但据我所知,这将执行即使我的外部函数(myFunc)将停止,由于这个外部函数将不会返回&#34; array2&#34;。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望循环“暂停”,同时执行一些功能,在循环内部可以使用数据,然后执行一个功能。当你说“for each loop step”时,我假设它适用于for循环中的每一步。

function myFunc(expr) {
    var array1 = [],
        array2 = [];

    for (var i = 0; i < expr.length; ++i) {
       // ...
       // Perform something here after a certain time, while the loop waits.
    }

    return array2;
};

据我所知,你无法完全达到这个目的,但是,如果你有可用的数据,你可以“伪造”你想要的行为。

请参阅我创建示例的jsfiddle

function myFunc(expr) {
    var array1 = [],
        array2 = [];

    for (var i = 0; i < expr.length; ++i) {
       // ...
       setTimeout(function(){
           // Do whatever you want to do.
       }, i*500); // i = 0 is instantly, i = 1 is after 0.5s, i=2 is 1s, and so on...
    }

    return array2;
};

您的(估计)时间线将从for循环开始时开始如下。

0s   -> function in timeout when i = 0 is called
0.5s -> function in timeout when i = 1 is called
1.0s -> function in timeout when i = 2 is called

请注意,超时不准确,并且在执行功能之前可能存在偏差。

如果修改在函数内部使用的变量,请注意范围问题。

我希望这有帮助!