cnu*_*cnu 1332 javascript setinterval
我用setInterval(fname, 10000);JavaScript在JavaScript中每10秒调用一次函数.是否有可能在某些事件上停止调用它?
我希望用户能够停止重复刷新数据.
Joh*_*kin 2058
setInterval()返回一个间隔ID,您可以将其传递给clearInterval():
var refreshIntervalId = setInterval(fname, 10000);
/* later */
clearInterval(refreshIntervalId);
Run Code Online (Sandbox Code Playgroud)
请参阅文档for setInterval()和clearInterval().
Qui*_*son 102
如果将返回值设置setInterval为变量,则可以使用clearInterval它来停止它.
var myTimer = setInterval(...);
clearInterval(myTimer);
Run Code Online (Sandbox Code Playgroud)
小智 46
您可以设置一个新变量,并在每次运行时将其递增++(向上计数),然后我使用条件语句来结束它:
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);
});
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助,这是对的.
Sch*_*ien 13
上面的答案已经解释了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>
Run Code Online (Sandbox Code Playgroud)
由于函数是在按钮单击处理程序中定义的,因此您不必再次定义它.如果再次单击该按钮,则可以恢复计时器.
dan*_*yag 11
在nodeJS中,您可以在setInterval函数中使用“ this ”特殊关键字。
您可以使用 this关键字来清除间隔,下面是一个示例:
setInterval(
function clear() {
clearInterval(this)
return clear;
}()
, 1000)
Run Code Online (Sandbox Code Playgroud)
当您在函数中 打印此特殊关键字的值时,您会输出一个 Timeout 对象Timeout {...}
Onu*_*rım 10
已经回答了......但如果您需要一个功能强大,可重复使用的计时器,它还支持不同时间间隔的多个任务,您可以使用我的TaskTimer(用于节点和浏览器).
// 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();
Run Code Online (Sandbox Code Playgroud)
在您的情况下,当用户点击干扰数据刷新时; 您也可以拨打timer.pause()那么timer.resume(),如果他们需要重新启用.
clearInterval() 方法可用于清除使用 setInterval() 方法设置的计时器。
setInterval 总是返回一个 ID 值。可以在 clearInterval() 中传递此值以停止计时器。下面是一个计时器从 30 开始并在变为 0 时停止的示例。
let time = 30;
const timeValue = setInterval((interval) => {
time = this.time - 1;
if (time <= 0) {
clearInterval(timeValue);
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
setInterval返回一个数字:
拿这个号码。将它传递给函数clearInterval,你就安全了:
代码:
始终将返回的数字存储setInterval在变量中,以便稍后可以停止间隔:
const intervalID = setInterval(f, 1000);
// Some code
clearInterval(intervalID);
Run Code Online (Sandbox Code Playgroud)
(将此号码视为 的 ID setInterval。即使您已经呼叫了许多setInterval,您仍然可以通过使用正确的 ID 来阻止其中任何一个。)
@cnu,
你可以停止间隔,当试试运行代码之前看看你的控制台浏览器(F12)...尝试注释clearInterval(触发器)再看一个控制台,而不是美化?:P
检查示例来源:
var trigger = setInterval(function() {
if (document.getElementById('sandroalvares') != null) {
document.write('<div id="sandroalvares" style="background: yellow; width:200px;">SandroAlvares</div>');
clearInterval(trigger);
console.log('Success');
} else {
console.log('Trigger!!');
}
}, 1000);Run Code Online (Sandbox Code Playgroud)
<div id="sandroalvares" style="background: gold; width:200px;">Author</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899869 次 |
| 最近记录: |