1

本文中,使用 setInterval() 给出了以下函数来执行x次操作

setIntervalX(function () {
    animateColor();
    //or something
}, 3000, 4);

function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

        callback();

        if (++x === repetitions) {
            window.clearInterval(intervalID);
        }
    }, delay);
}

callback() 在这里做什么?在指定的重复次数完成后,我正在尝试执行一个功能。但是这个

setIntervalX(function () {
    animateColor();
}, 3000, 4, function(){

completeFunction();

});

不起作用。也许这种语法是非常错误的。我的印象是使用 jquery,您可以将这样的函数串在一起..

非常感谢任何见解。谢谢!

4

4 回答 4

4

我想你误解了描述。setIntervalX 执行 x 次交互,而您希望在迭代后有一个回调函数。

function setIntervalX(interationFunction, delay, repetitions, callbackFunction) {
    var x = 0;
    var intervalID = window.setInterval(function () {

        iterationFunction();

        if (++x === repetitions) {
            callbackFunction();
            window.clearInterval(intervalID);
        }
    }, delay);
}

setIntervalX(
  function() {
    // this executed every time the interval triggers
  },
  1000, // amount of milliseconds to delay before interval triggers
  5, // amount of repetitions before interval is stopped and callback is executed
  function() {
    // this will be executed after the interval triggered 5 times
    // so after round about 5 seconds after setIntervalX was started
  }
);
于 2012-04-20T17:36:41.117 回答
2
function setIntervalX(func, delay, times, callback) {
    if (times > 0) {
        setTimeout(function() {
            func.apply(arguments.callee);
            setIntervalX(func, delay, --times, callback);
        }, delay);
    } else {
        callback.apply(this);
    }
}

setIntervalX(function() {
    document.write('ping!<br />');
}, 1000, 5, function() {
    document.write('Finished!<br />');
});

​</p>

我个人更喜欢 setTimeout 方法......但这只是我。试一试,看看它是否有效。演示

啊,看来我误读了你的整个帖子......所以托比亚斯对你的问题的推理是正确的。我的就是你想要的一个例子。

于 2012-04-20T17:44:21.433 回答
0

哇,Frame.js简单多了:

for(var i=0; i<4; i++){
    Frame(3000, animateColor);  
}
Frame(completeFunction);
Frame.start();

这两个函数都需要调用作为第一个参数传递给它们的回调:

function animateColor(callback){
    // do stuff
    callback(); // to advance to the next interval
}
function completeFunction(callback){
    // do stuff
    callback(); // to advance to conclude the series of Frames
}
于 2012-04-20T17:47:34.930 回答
0

callback在原始函数中,每个间隔最多运行一次X。尝试此修改以允许完整的回调:

setIntervalX(function () {
    animateColor();
    //or something
}, 3000, 4, function(){
    alert("all done!");
});

function setIntervalX(callback, delay, repetitions, complete) {
    var x = 0;
    var intervalID = window.setInterval(function () {

        callback();

        if (++x === repetitions) {
            window.clearInterval(intervalID);
            complete();
        }
    }, delay);
}
于 2012-04-20T18:09:27.063 回答