睡1秒然后追加?

时间:2014-10-12 22:19:57

标签: javascript jquery

我需要在相互添加之间添加等待1秒的iframe,而不是一次添加所有iframe。试着没有运气,它只是立即追加它。

var  i = 0;

function appendSomeItems() {
  for (var j=0; j<50; i++, j++) {
    $('body').append('<iframe src="http://www.example.com"></iframe>').delay(1000);
  }
  if (i < 50) window.setTimeout(appendSomeItems, 0);
}

appendSomeItems();

这样做的正确方法是什么?感谢。

3 个答案:

答案 0 :(得分:7)

for (var j = 0; j < 50; j++) {
  setTimeout(function() {
     $('body').append('<iframe src="http://www.example.com"></iframe>');
  }, j * 1000);  // each call is scheduled to run after j seconds
}

ps:在建立所需的呼叫数量后,不要使用非常大的数字或使用setInterval与单个功能,计数器和清除定时器,或者setTimeout当前呼叫结束时的下一个呼叫定时功能。在最后一次通话时跳过这一步。

答案 1 :(得分:1)

另一个选项是使用以下代码,在上一个代码完成后添加新的超时。所以你永远不会有多个超时等待。

var start=0;
var max=50;
function appendSomeItems(i) {
    $('body').append('<iframe src="http://www.example.com"></iframe>');
    if(i<max){
        setTimeout(function(){appendSomeItems(i+1)},1000);
    }
}
appendSomeItems(start);

答案 2 :(得分:0)

jQuery's delay method用于制作动画。

您需要做的是每秒触发一次方法。为了做到这一点,你可以写:

var itemsToAppend = 50;

function appendSomeItems()
{
    $('body').append('<iframe src="http://www.example.com"></iframe>');

    if (itemsToAppend--) // if 0 skips
        setTimeout(appendSomeItems, 1000);
}

appendSomeItems();