我正在使用.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)显示数据的其他元素迟了大约半秒。为什么和它可以修复?我真的很感兴趣。
答案 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);
});