$。每个显示数据然后暂停3秒

时间:2016-09-21 18:21:21

标签: javascript jquery json loops timeout

我正在使用.each()迭代一个JSON文件。我希望我的页面显示3秒的数据,暂停3秒然后继续下一个并重复。我有这段代码:

    $.getJSON(url,function(json1){
                    $.each(json1.data,function(numb){
                        setTimeout(function() {
                            alert(json1.data[numb]["title"]);   
                        },3000);

                    });     

            });

我认为这样做会但是这只会等待3秒然后连续显示每一位数据,我需要它们相隔3秒。

我该怎么做?谢谢!

编辑:好的,所以使用这段代码: var num = 0;

                $.getJSON(url,function(json1){

                    $.each(json1.data,function(broj){

                        setTimeout(function() {

                            $(".bubble").text(json1.data[broj]["text"]);    

                        },6000*num);
                        num++;
                    });



            });

但这比使用setInterval(func,3000)显示数据的其他元素迟了大约半秒。为什么和它可以修复?我真的很感兴趣。

4 个答案:

答案 0 :(得分:2)

指数的时间: -

mix.scripts

这将使第1个0秒,第2个3秒,第3个6秒等

或者你想要第一个等待,使用:

gulpfile.js

答案 1 :(得分:1)

这是因为setTimeout没有阻塞,因此每个循环飞过声明所有超时,然后3秒后它们全部触发。您可能会将setTimeouts链接在一起,几乎以递归方式调用它们。在每个setTimeout里面,你会调用下一个setTimeout传递下一个数据元素而不是每个循环(可能仍然需要某种类型的计数器来增加,所以你有一个项目的索引。增加它并在setTimeout中进行边界检查。) 。这样,下一个setTimeout在前一个完成之前不会被声明。

我实际上刚做了一些事情,最近设置了一个警报栏,每5秒钟更换一次显示来自数组的文本:

var speed = 5000;    /*this is the time in milliseconds adjust to suit*/

    function showAlert(x) {
        if (!x || x > (sysAlert.length - 1) || x < 0) x = 0;
        document.getElementById("alertBar").innerHTML = sysAlert[x];
        return setTimeout(showAlert, speed, ++x);
    }
    showAlert(0);

答案 2 :(得分:1)

var count = 0;

$.each(mydata, function(data){
count++;
setTimeout(function() {
                        console.log(data);   
                    },3000 * count);
})

答案 3 :(得分:0)

假设索引numb是数字:

$.getJSON(url,function(json1){

    var numb = 0; // starting point of array

    var iterate = function(){
        if(json1.data[numb]){ // only setTimeout if this index exists
            alert(json1.data[numb++]["title"]);
            setTimeout(iterate, 3000);
        }
    }

    // show the first result immediately
    iterate();

    // OR

    // show the first result 3000 milliseconds after the data is loaded
    // setTimeout(iterate, 3000);
});