为什么这个JS变量在页面加载时运行

时间:2012-12-17 12:21:26

标签: javascript jquery

我不明白为什么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();在我的点击事件中被调用不起作用。

此外,这不是完整的代码,我不能把它放入小提琴中,因为它对内联网有很大的依赖性。

所以你无法看到一个有效的例子。

2 个答案:

答案 0 :(得分:1)

您将其设置为setInterval

的返回值
timer: setInterval(function(){MC.caro.myTimer()},5000),

立即对此进行评估。

答案 1 :(得分:1)

我认为@JamieHutber是正确的;立即计算setInterval并将其分配给timer属性。

尝试:

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

通过计时器()启动计时器。如果您要求将其分配给变量,则:

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

HTH