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メソッドを好みます...しかしそれは私だけです。これを試してみて、機能するかどうかを確認してください。デモ

Ahh it appears I have misread you're entire post... so Tobias is correct in his reasoning for your question. mine is an example of what you want.

于 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 に答える