0

これが私のコードです.... http://jsfiddle.net/KQ8gW/ これで私はsetTimeoutを1分に設定しましたが、関数はそれよりずっと前に呼び出されます.なぜそうなのですか????

4

3 に答える 3

2

関数への参照を渡さずに、すぐに関数を呼び出しており、間隔を繰り返し設定しています。したがって、渡すsetInterval()のは実行からの戻り値でSlide(c,n)あり、後で呼び出される関数ではありません。したがって、すぐに1回だけ呼び出されます。

これを修正するには、次のように変更します。

setInterval(Slide(c,n),60000);

これに:

setTimeout(function() {Slide(c,n)},60000);

これが私のコードである場合、タイマーも使用しません。次のようなアニメーション完了関数を使用します。

var n = $("#slideShow div img").length;
var c = 0;
Slide(c,n);

function Slide(c,n){
    c = ++c % n;
    $("#slideShow div").animate(
        {left:-500*c}, 
        3000, 
        function() {Slide(c,n)}
    );
}​

作業デモ: http: //jsfiddle.net/jfriend00/nykd3/

于 2012-08-05T16:55:35.733 に答える
0

タイムアウトではなく、間隔を設定しました。使ってみてくださいsetTimeout(function, time)

于 2012-08-05T16:55:02.050 に答える
0

間隔内の間隔内の間隔を呼び出しています....など。

毎分定期的に関数を実行し、関数が実行されるたびに新しい間隔を設定し、無限大までループします。

次のように、間隔を関数の外に置き、関数で呼び出して評価を回避します。

var n = $("#slideShow div img").length, c = 0;

Slide(c, n);
setInterval(function() { Slide(c, n); }, 60000);

function Slide(c, n) {
    c = ++c % n;
    $("#slideShow div").animate({
        left: -500 * c
    }, 7000);
}​
于 2012-08-05T16:59:09.950 に答える