0

MC.caro.myTimer()なぜページの読み込みで実行されているのか、その変数がわかりません。それで、私がそれを呼ばずにこれがどのように実行されるのか。

自動実行機能と関係があるのではないかと思いました。

    var MC = {};

    (function($){
        "use strict";

        MC.init = function (){
            //disable to turn off carousel
            MC.caro.init();
        };

        MC.caro = {
            init: function(){
                //Build carousel for us to use
                MC.caro.build();
                //Bind click events to buttons
                $('.mc-carousel--nav--buttons').on('click','li',function(){
                    MC.caro.advance($(this));

                    //stop the current ticking
                    MC.caro.stopMyTimer();

                    //Start up movement after 15seconds
                    setInterval(function(){MC.caro.myTimer()},10000);
                    console.info('running');
                });
            },
            build: function(){
                MC.caro.jsonRun(function(){
                    console.info('running1');
                });
            },
            myTimer: function(){
                console.info('running2');
                MC.caro.advance(nextItem,'slow');
            },
            //Sets up the timer
            timer:setInterval(function(){MC.caro.myTimer()},5000),
            stopMyTimer: function(){
                clearInterval(MC.caro.timer);
            }
        }
    })(jQuery);

    MC.init();

別の問題があります:

コードをクリックすると$('.mc-carousel--nav--buttons').on('click','li',function(){、15秒待ってから実行されます。予想通り。しかし、5回クリックすると、15秒待ってから、クリックしたのとまったく同じ時間と順序で実行されます。つまりMC.caro.stopMyTimer();、クリックイベント内で呼び出され、機能していません。

また、これは完全なコードではありません。イントラネットに大きく依存しているため、フィドルに入れることもできません。

あなたが実際の例を見ることができないほどのappoligies。

4

2 に答える 2

1

@JamieHutber は正しいと思います。setInterval はすぐに評価され、timer プロパティに割り当てられます。

試す:

timer: function() {
  setInterval(function(){MC.caro.myTimer()},5000);
}

timer() を介してタイマーを開始します。これを変数に割り当てる必要がある場合は、次のようにします。

timer: function() {
  this._timer = setInterval(function(){MC.caro.myTimer()},5000);
}

HTH

于 2012-12-17T14:21:35.227 に答える
1

あなたはそれを戻り値に設定していますsetInterval

timer: setInterval(function(){MC.caro.myTimer()},5000),

これはすぐに評価されます。

于 2012-12-17T12:24:32.820 に答える