我使用setInterval(fname, 10000);
JavaScript 每 10 秒调用一次函数。是否可以在某些事件中停止调用它?
我希望用户能够停止重复刷新数据。
我使用setInterval(fname, 10000);
JavaScript 每 10 秒调用一次函数。是否可以在某些事件中停止调用它?
我希望用户能够停止重复刷新数据。
setInterval()
返回一个间隔 ID,您可以将其传递给clearInterval()
:
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
请参阅该文档为setInterval()
和clearInterval()
。
如果将 的返回值设置setInterval
为变量,则可以使用clearInterval
来停止它。
var myTimer = setInterval(...);
clearInterval(myTimer);
您可以设置一个新变量,并在每次运行时将其递增 ++(加一),然后我使用条件语句来结束它:
var intervalId = null;
var varCounter = 0;
var varName = function(){
if(varCounter <= 10) {
varCounter++;
/* your code goes here */
} else {
clearInterval(intervalId);
}
};
$(document).ready(function(){
intervalId = setInterval(varName, 10000);
});
我希望它有所帮助,这是正确的。
上面的回答已经解释了 setInterval 如何返回一个句柄,以及如何使用这个句柄来取消 Interval 计时器。
一些架构考虑:
请不要使用“无作用域”变量。最安全的方法是使用 DOM 对象的属性。最简单的地方是“文档”。如果刷新是通过开始/停止按钮启动的,您可以使用按钮本身:
<a onclick="start(this);">Start</a>
<script>
function start(d){
if (d.interval){
clearInterval(d.interval);
d.innerHTML='Start';
} else {
d.interval=setInterval(function(){
//refresh here
},10000);
d.innerHTML='Stop';
}
}
</script>
由于该函数是在按钮单击处理程序中定义的,因此您不必再次定义它。如果再次单击该按钮,则可以恢复计时器。
已经回答了...但是如果您需要一个特色的、可重复使用的计时器,该计时器还支持不同时间间隔的多个任务,您可以使用我的TaskTimer(适用于 Node 和浏览器)。
// Timer with 1000ms (1 second) base interval resolution.
const timer = new TaskTimer(1000);
// Add task(s) based on tick intervals.
timer.add({
id: 'job1', // unique id of the task
tickInterval: 5, // run every 5 ticks (5 x interval = 5000 ms)
totalRuns: 10, // run 10 times only. (omit for unlimited times)
callback(task) {
// code to be executed on each run
console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
// stop the timer anytime you like
if (someCondition()) timer.stop();
// or simply remove this task if you have others
if (someCondition()) timer.remove(task.id);
}
});
// Start the timer
timer.start();
在你的情况下,当用户点击打扰数据刷新时;您也可以拨打timer.pause()
那么timer.resume()
,如果他们需要重新启用。