循环jquery中的函数之间的延迟

时间:2015-05-19 09:13:07

标签: javascript jquery

我有一个显示模态框的jQuery函数:

function ShowAnonce(){
    ...
    jQuery(".ShowAnonce").show();
    jQuery(".ShowAnonce").animate({opacity: 1},300).delay(1800).animate({opacity: 0},300);
}

我想要做的是以不同的随机间隔显示此框10次。我使用for循环和setTimeout这样:

for(i=0;i<10;i++){  
    setTimeout(ShowAnonce(),Math.random()*100);
}

但是它显示了10次没有延迟的方框。我该怎么做才能解决它?

另外,为什么我不能在ShowAnonce函数结束时执行以下操作?

    jQuery(".ShowAnonce").hide();

如果我这样做,它不会显示我的框,因为样式display:none一直被分配。

3 个答案:

答案 0 :(得分:1)

Math.random()可以返回十进制值,如0.123。哪个setTimeout()不能采取。尝试Math.ceil(Math.random())这会给你一个整数,但可能会一次又一次地给出相同的值。 我会尝试(Math.ceil(Math.random())* 10)。

答案 1 :(得分:0)

作为替代方案,您可以使用setInterval,如下所示,而不是x次{for}循环:

var x = 0;
var intervalID = setInterval(function () {
   ShowAnnounce();
   if (++x === 10) {
       window.clearInterval(intervalID);
   }
}, Math.random()*100);

答案 2 :(得分:0)

关于每个()迭代的另一篇文章给了我一个答案。所以它对我有用:

    var time = 0;

    for(i=0;i<10;i++){
        time = time + Math.random() *10000;
        setTimeout(ShowAnonce, time);
    }