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

Posted

技术标签:

【中文标题】使用动态参数在 setInterval 函数中禁用计时器【英文标题】:Disable timer within setInterval function with dynamic parameters 【发布时间】:2016-11-04 03:26:19 【问题描述】:

我想将动态参数传递给 setInterval 函数(参见问题 here),特别是 @tvanfosson 的评论。 但是现在,如果满足某个条件,我也想禁用该计时器。我试图将计时器变量定义为全局变量,但我仍然在这一行将计时器设为undefinedconsole.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】:

有几个问题:

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

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

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

【讨论】:

以上是关于使用动态参数在 setInterval 函数中禁用计时器的主要内容,如果未能解决你的问题,请参考以下文章

在JavaScript的SetInterval()函数中传递参数

带参数的 Javascript setinterval 函数

setTimeOut和setInterval工作原理

如何使用定时器settimeout,setInterval执行能传递参数的函数

如何使用定时器settimeout,setInterval执行能传递参数的函数

如何使用定时器settimeout,setInterval执行能传递参数的函数