在JQuery中延迟循环

时间:2013-08-27 20:55:05

标签: javascript jquery

我有下面的脚本正在运行,但是;我希望每个数组项在循环继续之前显示几秒钟。如何在JQuery中实现?

 <script>
 $(document).ready(function () {
     $("#x").click(function () {
         $.get('testfile.htm', function (data) {
             var i = 0;
             var mydata = [];

             $('#dc').html(data);

             $('#dc').find('div').each(function () {
                 mydata[i] = $(this).text()
                 i++;
             });

             for (id = 0; id < mydata.length; id++) {
                 $('#res').text(mydata[id]);
             }
         })
     });
 });
 </script>

3 个答案:

答案 0 :(得分:3)

您可以使用fx队列,只需queue更新所有文字更改,每次更改之间都有延迟。这样您还可以无缝使用fadeOutfadeIn等动画。

jQuery方式:
$.each(mydata, function (i, val) {
    $('#res').queue(function (n) {
        $(this).text(val);
        n();
    }).delay(1000); //how many miliseconds between text changes
    //or with a simple fade in-out effect:
    //}).fadeIn().delay(1000).fadeOut();
});
<子>原始
for (id = 0; id < mydata.length; id++) {
    $('#res').text(mydata[id]);
}

答案 1 :(得分:1)

试试这个:

for (var id = 0; id < mydata.length; id++) {
    (function (id) {
        setTimeout(function () {
            $('#res').text(mydata[id]);
        }, 3000 * id); // Change 3000 to the delay you want, in ms
    }(id));
}

基本上,每个setTimeout调用立即返回,因此您将每个延迟增加3000毫秒(或左右),以便每个.text调用至少相隔3000毫秒。

答案 2 :(得分:0)

使用settimeout()

这不是你要求的jQuery,但它完成了工作。下面是我为项目创建的一些代码示例。

setTimeout(function () {
            Scroller.Animate("down")
        }, 10000);

10000是10秒。

所以你想要做类似

的事情
        for(id = 0; id < mydata.length; id++)
        {
            setTimeout(function(){
                $('#res').text(mydata[id])
            }, 5000);
        }