从闭包内清除间隔

时间:2014-03-21 12:43:48

标签: javascript jquery closures clearinterval

当用户将鼠标悬停在元素上时,我尝试清除间隔,然后当它们悬停在元素上时再次启动它。我认为这是一个封闭,但我不确定,希望我的代码能够理解我想要做的事情。

var rotatorInterval = function(elem){
        var interval = setInterval(function(){
            var active = elem.find('.dot.active');
            if(active.is('.dot:last-of-type',elem)){
                elem.find('.dot').first().click();
            }else{
                active.next().click();
            }
        },6000);
        interval;
        return interval;
    };
if($('.rotator').length){
    $('.rotator').each(function(){
        var self = $(this);
        rotatorInterval(self);
        self.find('.slide, .dot').on('mouseenter',function(){
            console.log('hovered');
            clearInterval(interval);
        });
    });
}

我尝试从那个闭包中返回间隔,但是当我盘旋它时,表示间隔(我返回的变量的名称)没有被定义,所以它就像它没有返回它或者什么。 / p>

1 个答案:

答案 0 :(得分:3)

你只需要在某个地方实际返回间隔参考

var rotatorInterval = function (elem) {
    var interval = setInterval(function () {
        var active = elem.find('.dot.active');
        if (active.is('.dot:last-of-type', elem)) {
            elem.find('.dot').first().click();
        } else {
            active.next().click();
        }
    }, 6000);

    return interval;
};

if ($('.rotator').length) {
    $('.rotator').each(function () {
        var self = $(this);

        var return_interval = rotatorInterval(self);

        self.find('.slide, .dot').on('mouseenter', function () {

            clearInterval(return_interval);

        });
    });
}