使用动态参数禁用setInterval函数中的定时器

Disable timer within setInterval function with dynamic parameters

本文关键字:定时器 函数 动态 参数 setInterval      更新时间:2023-09-26

我想传递动态参数到setInterval函数(见这里的问题),特别是@tvanfosson的评论。但现在,我还想在满足特定条件时禁用那个计时器。我试图将定时器变量定义为全局变量,但我仍然得到定时器作为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)你必须从你的createInterval()函数返回timerID:

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

2) clearInterval()clearInterval(timer)一样工作,而不是timer.clearInterval()