协调setInterval和setTimeout分别循环jQuery



我以这种方式使用each()setIntervalsetTimeout的无限循环:

var links = [];
links = ['zuinfos-1-tab', 'zuinfos-2-tab', 'zuinfos-3-tab', 'allgemein-tab'];
var init = 5000
var z = 0;
var n = new Date().getTime()
setInterval(function() {
$(links).each(function(index, value) {
setTimeout(function() {
$('a#' + value).trigger('click');
var j = new Date().getTime()
var diff = j - n
console.log(z + 't' + index + 't' + value + 't' + diff);
}, 5000 * index)
});
z++;
}, init * 4)


一切都很好,但第一个setInterval来得太晚了。我必须将它设置为init * 4,因为每个循环中有四个元素。一开始应该从init * 1开始。

我试过用这样的柜台:

}, z==1?init:init*4 )

但这并不奏效。

的问题

setInterval(..., z==1?init:init*4)

间隔只计算一次,而不是在每个循环上。

如果您将回调移动到它自己的函数,您可以从初始的setTimeout调用它,然后从第一次调用的setInterval调用它,例如:

function autoLinkClicker()
{
$(links).each(function(index, value) {
setTimeout(function() { ... }, 5000 * index);
});
}
setTimeout(function() { 
autoLinkClicker();
setInterval(autoLinkClicker, init*4);
}, init);

最新更新