延迟后在jQuery中运行函数

时间:2015-04-16 18:24:59

标签: jquery function timeout delay intervals

所以,基本上我有三个功能,我希望它们一个接一个地运行,延迟两秒。

我希望实现以下目标:

firstFunction();
// Two seconds delay
secondFunction();
// Two seconds delay
thirdFunction();
// Two seconds delay
firstFunction();

等等。我尝试使用setInterval,setTimeout,jquery延迟,到目前为止我没有实现任何东西 - 在最佳情况下,所有三个函数同时运行。确切地说,这三个函数的代码非常相似

var active = $(".active.two").removeClass('active');
if (active.next('img') && active.next('img').length) {
    active .next('img').addClass('active');
} else {
    active.siblings(":first-child").addClass('active');
}

如果你能告诉我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以使用setInterval来实现此目的。您可以通过将函数的引用存储在数组中然后依次调用它们来简化它。试试这个:

function funcOne() {
    console.log('one');
}

function funcTwo() {
    console.log('two');
}

function funcThree() {
    console.log('three');
}

var i = 0;
var funcs = [ funcOne, funcTwo, funcThree ];
setInterval(function() {
    funcs[i % funcs.length]();
    i++;
}, 2000);

Example fiddle

答案 1 :(得分:0)

假设您的函数是同步的,您希望在每个函数完成后使用setTimeout()计划对下一个函数的调用。以下示例将在每次调用之间调用每个函数,延迟时间为2秒。



function firstFunction() {
   $('#log').append('<p>First</p>');
}
function secondFunction() {
   $('#log').append('<p>Second</p>');
}
function thirdFunction() {
   $('#log').append('<p>Third</p>');
}

function callFunctions(function_list, delay) {
  function callNextFunc() {
    if (function_list.length) {
      var nextFunc = function_list.shift();
      nextFunc();
      setTimeout(callNextFunc, delay);
    }
  };
  callNextFunc();
}

var function_list = [firstFunction, secondFunction, thirdFunction];
callFunctions(function_list, 2000);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="log"></div>
&#13;
&#13;
&#13;