使用动态参数在 setInterval 函数中禁用计时器
Disable timer within setInterval function with dynamic parameters
我想将动态参数传递给 setInterval 函数(参见问题 here),特别是 @tvanfosson 的评论。
但是现在,如果满足特定条件,我还想禁用该计时器。我试图将定时器变量定义为全局变量,但我仍然在这一行将定时器作为 undefined
:
console.log('else. timer=' + timer);
:
else. timer=undefined
<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) 您必须 return 来自 createInterval()
函数的 timerID:
function createInterval(f, dynamicParameter, interval) {
return setInterval(function () {
f(dynamicParameter);
}, interval);
}
2) clearInterval()
像这样 clearInterval(timer)
,而不是 timer.clearInterval()
。
我想将动态参数传递给 setInterval 函数(参见问题 here),特别是 @tvanfosson 的评论。
但是现在,如果满足特定条件,我还想禁用该计时器。我试图将定时器变量定义为全局变量,但我仍然在这一行将定时器作为 undefined
:
console.log('else. timer=' + timer);
:
else. timer=undefined
<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) 您必须 return 来自 createInterval()
函数的 timerID:
function createInterval(f, dynamicParameter, interval) {
return setInterval(function () {
f(dynamicParameter);
}, interval);
}
2) clearInterval()
像这样 clearInterval(timer)
,而不是 timer.clearInterval()
。