协调setinterval和settimeout以循环jquery

kupeojn6  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(213)

我使用一个无止境的循环 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 )

但这是行不通的。

zu0ti5jz

zu0ti5jz1#

问题在于

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);

相关问题