代码之家  ›  专栏  ›  技术社区  ›  E. Alex

JavaScript/jQuery:在上一次迭代时重新启动循环

  •  0
  • E. Alex  · 技术社区  · 10 年前

    我正在尝试创建一个for循环,该循环在到达最后一次迭代时重新开始。

    以下是我到目前为止的情况:

        for (var i = 0; i < x + 3; i++) {
        (function(i){
            setTimeout(function(){
                $('#e'+i).animate({'color': '#B2E4FF'}, 500);
                var j = i - 3;
                $('#e'+j).animate({'color': '#A6A5A6'}, 500);
            }, 100 * i);
    
        }(i));
        if(i == x + 2) {
            i = -1;
            continue;
        }
    }
    

    当我添加 continue; 对于脚本,它完全停止工作。

    我想用这个实现的是一个动画滑动渐变文本。演示1循环: http://puu.sh/aCzrv/98d0368e6b.mp4

    完整代码: http://jsfiddle.net/D6xCe/

    当做

    亚历克斯

    3 回复  |  直到 10 年前
        1
  •  3
  •   Amir Popovich    10 年前

    不要滥用 for
    使用 while 循环。

    var isCompleted = false;
    
    while(!isCompleted){
    // do logic and when completed assign isCompleted = true;
    
    }
    

    编辑
    根据您的要求,它应该是这样的:

    var isCompleted = false;
    var i = 0;
    while (!isCompleted) {
        (function (i) {
            setTimeout(function () {
                $('#e' + i).animate({
                    'color': '#B2E4FF'
                }, 500);
                var j = i - 3;
                $('#e' + j).animate({
                    'color': '#A6A5A6'
                }, 500);
            }, 100 * i);
        }(i));
        if (i == x + 2) {
            i = 0;
        } else if (i == x + 3) {
            isCompleted = true;
        }
        i++;
    }
    

    您的代码有问题
    你说如果 i < x+3 -> break the loop 并且如果 i == x+2 -> reset the index and start again.

    由于i在每次迭代中都递增1,因此您正在尝试执行“无限循环”。 使用 while(true) 为此。

    你永远无法到达 i == x+3 条件,以便您可以从我添加的代码中删除它,并获得一个无限循环,该循环基于x+2次迭代后的重置进行逻辑运算。

    var i = 0;
    while (true) {
        (function (i) {
            setTimeout(function () {
                $('#e' + i).animate({
                    'color': '#B2E4FF'
                }, 500);
                var j = i - 3;
                $('#e' + j).animate({
                    'color': '#A6A5A6'
                }, 500);
            }, 100 * i);
        }(i));
    
        i = i == x+2 ? 0 : i+1;
    }
    
        2
  •  1
  •   dfsq    10 年前

    您可以将动画代码包装在函数中,并在循环结束后再次重复此函数:

    function animate() {
        for (var i = 0; i < x + 3; i++) {
            (function (i) {
                setTimeout(function () {
                    var j = i - 3;
                    $('#e' + i).animate({color: '#B2E4FF'}, 500);
                    $('#e' + j).animate({color: '#A6A5A6'}, 500, function() {
                        if (i == x + 2) {
                            animate();
                        }
                    });
                }, 100 * i);
            }(i));
        }
    }
    animate();
    

    演示: http://jsfiddle.net/D6xCe/2/

        3
  •  0
  •   Ajit Singh    10 年前

    如果你想继续执行某个语句,只需做一个不定式循环。有很多方法可以形成不定式循环,最简单的方法是使用while循环。如:

    while(true)
    {
    //your statements
    }
    

    非常感谢。