如何在javascript中停止window.setInterval?
我有一个javascript函数,每2000ms调用一次。我想停止此操作,这样我就可以让用户在页面上执行其他操作,而无需再次调用它。这可能吗?以下是每2000ms调用一次的函数:如何在javascript中停止window.setInterval?,javascript,jquery,Javascript,Jquery,我有一个javascript函数,每2000ms调用一次。我想停止此操作,这样我就可以让用户在页面上执行其他操作,而无需再次调用它。这可能吗?以下是每2000ms调用一次的函数: window.setInterval(function getScreen (sid) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new
window.setInterval(function getScreen (sid) {
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("refresh").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","getScreen.php?sid="+<?php echo $sid; ?>,true);
xmlhttp.send();
},2000);
没有内置的暂停功能,但您可以停止它,然后使用相同的功能启动新的间隔 首先,您需要捕获调用setInterval返回的id: 如果你想阻止它,打电话
window.clearInterval(intervalId);
在您的情况下,我建议自己定义setScreen,而不是在调用setInterval的内部。通过这种方式,当您要恢复间隔时,只需使用intervalId=window.setIntervalsetScreen,2000即可。您不能暂停间隔,但可以停止并重新启动间隔
var timer = setInterval(xx,tt);
// then some time later
clearInterval(timer);
您只需从setInterval捕获返回值,并在需要停止时调用clearInterval
另一种在任何时候都可以停止重复的重复方法是重复执行setTimeout,然后执行clearTimeout以停止下一个计时器,或者不启动下一个setTimeout。使用window.setTimeout而不是window.setInterval更容易做到这一点。以下是根据我的回答改编的 现场演示: 代码:
如果您使用jQuery,我建议您使用该插件 然后,您可以轻松暂停计时器:
timer.pause();
并恢复:
timer.play();
不要再申报任何东西
只需添加一个类,告诉间隔不要做任何事情。例如:悬停
var i=0;
window.setIntervalfunction{//声明新函数
if!$'counter'.hasClass'pauseInterval'{//仅当它没有此类'pauseInterval'时运行
$'showCount'.htmli++;//仅用于解释和显示
}
}, 500;
$'counter'.hover函数{//鼠标输入
$this.addClass'pauseInterval';
$“计数”。文本“停止计数…”;
},函数{//鼠标离开
$this.removeClass'pauseInterval';
$“计数”。文本“计数…”;
}
;
不要使用setInterval,尤其是在处理网络XHR/fetch调用时。无法保证您的请求会按时完成,但setTimeout不会等待启动下一个请求,从而打开越来越多的连接
只需使用一个setTimeout,它与一个简单的if语句一起重新调度自身
函数更新内容{
有人答应了
.然后=>{
如果继续{
setTimeoutupdateContent,2000年;
}
}
.catch=>console.loge;
}
更新内容
谢谢你的提示,这很有用。你能解释一下为什么这段代码会回答这个问题吗?不鼓励只使用代码的答案,因为它们不会教授解决方案。非常好!我很容易地从暂停延迟添加了一个启动。github上的计时器版本看起来更像是op的完美答案。泰!这是一个DoS漏洞。如果由于流量/负载的原因,XMLHttpRequest花费的时间超过2秒怎么办?您将堆积请求,并有导致服务器停机的风险。考虑阅读文章和使用超时或适当的调度代替。
var timer = $.timer(function() {
alert('This message was sent by a timer.');
}, 2000, true);
timer.pause();
timer.play();
var intervalId = window.setInterval(code);
window.clearInterval(intervalId);