使用动态参数在setInterval函数内禁用计时器

时间:2016-11-04 03:26:20

标签: javascript jquery timer setinterval

我想将动态参数传递给setInterval函数(请参阅问题here),特别是@tvanfosson的注释。 但现在,如果满足某个条件,我也想禁用该计时器。我试图将timer变量定义为全局变量,但我仍然在此行上将计时器作为undefined
 console.log('else. timer=' + timer);

  

别的。计时器=未定义

<script language="javascript" type="text/javascript">
    var timer;
    var params={};
    params.color='light';
    $(document).ready(function () {            
        timer=createInterval(showSmallWidget, params.color, 500);
    });

    function createInterval(f, dynamicParameter, interval) {
        setInterval(function () {
            f(dynamicParameter);
        }, interval);
    }

    function showSmallWidget(color) {
        if ($('#widget').html() == '') {
            //do stuff
        }
        else {
            console.log('else. timer=' + timer);
            if (timer) { console.log('CLEAR TIMER'); timer.clearInterval(); timer = null; }
        }
    }
</script>

我尝试创建一个JSFiddle,但我无法让它正常工作:https://jsfiddle.net/puhw3z2k/

1 个答案:

答案 0 :(得分:3)

有几个问题:

1)您必须从createInterval()函数返回timerID:

function createInterval(f, dynamicParameter, interval) {
    return setInterval(function () {
        f(dynamicParameter);
    }, interval);
}

2)clearInterval()的作用类似clearInterval(timer),而不是timer.clearInterval()