如何在while循环中添加延迟。 JavaScript的

时间:2016-10-15 19:51:48

标签: javascript

        function falling()
        {
            isFalling = true;

            while (isFalling == true)
            {

                if (y < 120) {

                    y++;

                }
                else if (y == 120) {
                    isFalling = false;

                }

            }

        }

我尝试在整个循环周围添加setTimeout(function(),围绕if语句,围绕y ++。我不知道我做错了什么。任何时候我添加其中任何一个页面变得没有响应一次调用下降函数。我很清楚这可能是一个重复的问题,但重复的问题没有帮助。                      {},100)

3 个答案:

答案 0 :(得分:1)

你会这样做:

function falling(y) {
    if (y < 120) {
        setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
    }
}

falling(0);

这个问题确实得到了多次回答,answers here与此并没有什么不同。

请注意,我删除了明显的全局变量isFalling。如果您确实需要在其他代码中使用该变量,那么您可以按如下方式更新该变量:

function falling(y) {
    isFalling = y < 120;
    if (isFalling) {
        setTimeout(falling.bind(this, y + 1), 100); // specify your delay.
    }
}

答案 1 :(得分:0)

我会改用window.setInterval(),因为你希望它重复到一定数量

work plunkr:

https://plnkr.co/edit/TbpplnIShiaJR7sHDUjP?p=preview

function falling()
    {
        var isFalling = true; 
        var y=0;
        myInterval = window.setInterval(function() {
          y++;
          console.log(y);
          if (y== 120) {
            clearInterval(myInterval);
          }
        }, 100)
    }

falling();

答案 2 :(得分:0)

如果调用下降()的意图是暂时将全局变量的值设置为 true (如当前代码所示),那么这应该做诀窍。

var isFalling = false;

function falling(fallDuration) {
  isFalling = true;
  console.log("now falling");

  setTimeout(function(){
    isFalling = false;
    console.log("landed");
  }, fallDuration || 1000);

}

falling();

我想你可能实际上想要坠落然后继续做其他事情。在这种情况下,您可能希望查看回调或承诺。你可能会做一个简单的事情:

var isFalling = false;

function falling(fallDuration, andThen) {
  isFalling = true;

  console.log("now falling");

  setTimeout(function() {
    isFalling = false;
    console.log("landed");
    andThen();
  }, fallDuration);

}

falling(1000, function(){ console.log("now standing"); });