Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中停止setInterval调用_Javascript_Dom Events_Setinterval - Fatal编程技术网

在JavaScript中停止setInterval调用

在JavaScript中停止setInterval调用,javascript,dom-events,setinterval,Javascript,Dom Events,Setinterval,我正在使用setInterval(fname,10000)在JavaScript中每10秒调用一个函数。有可能在某些事件中停止呼叫它吗 我希望用户能够停止重复刷新数据。setInterval()返回一个间隔ID,您可以将其传递到clearInterval(): 请参阅和的文档。如果将setInterval的返回值设置为变量,则可以使用clearInterval停止它 var myTimer = setInterval(...); clearInterval(myTimer); 您可以设置一个新

我正在使用
setInterval(fname,10000)
在JavaScript中每10秒调用一个函数。有可能在某些事件中停止呼叫它吗

我希望用户能够停止重复刷新数据。

setInterval()
返回一个间隔ID,您可以将其传递到
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);
});
var intervalId=null;
var-varCounter=0;
var varName=function(){

if(varCounter以上答案已经解释了setInterval如何返回句柄,以及如何使用该句柄取消间隔计时器

一些架构方面的考虑:

请不要使用“无作用域”变量。最安全的方法是使用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>
开始
功能启动(d){
如果(d.间隔){
间隔时间(d.interval);
d、 innerHTML='Start';
}否则{
d、 间隔=设置间隔(函数(){
//刷新这里
},10000);
d、 innerHTML='Stop';
}
}
由于该函数是在按钮单击处理程序中定义的,因此无需再次定义。如果再次单击按钮,计时器可以恢复。

为什么不使用更简单的方法?添加一个类! 只需添加一个类,告诉间隔不要做任何事情。例如:on hover

var i=0;
this.setInterval(函数(){
if(!$('#counter').hasClass('pauseInterval')){//仅在没有此类'pauseInterval'时运行
console.log('Counting…');
$('#counter').html(i++);//仅用于解释和显示
}否则{
console.log(“停止计数”);
}
}, 500);
/*在这个例子中,我在mouseover上添加了一个类,然后在mouseleave上再次删除它*/
$('#计数器')。悬停(函数(){//鼠标输入
$(this.addClass('pauseInterval');
},函数(){//鼠标左键
$(this.removeClass('pauseInterval');
}
);
/*其他例子*/
$(“#暂停区间”)。单击(函数(){
$(“#计数器”).toggleClass('pauseInterval');
});
正文{
背景色:#eee;
字体系列:Calibri、Arial、无衬线字体;
}
#柜台{
宽度:50%;
背景:ddd;
边框:2个实心#009afd;
边界半径:5px;
填充物:5px;
文本对齐:居中;
过渡:.3s;
保证金:0自动;
}
#计数器暂停间隔{
边框颜色:红色;
}

暂停

@cnu

当您在查看控制台浏览器(F12)之前尝试运行代码时,您可以停止间隔。try comment clearInterval(触发器)是否再次查看控制台,而不是美化器?:p

检查示例a源:

var trigger=setInterval(函数(){
if(document.getElementById('sandroalvares')!=null){
文件。书写(“SandroAlvares”);
清除间隔(触发器);
console.log('Success');
}否则{
log('Trigger!!');
}
},1000);

Author
已回答…但如果您需要一个功能齐全、可重复使用的计时器,该计时器还支持不同时间间隔的多个任务,您可以使用my(用于节点和浏览器)

//基本间隔分辨率为1000ms(1秒)的计时器。
常量计时器=新任务计时器(1000);
//根据勾选间隔添加任务。
timer.add({
id:'job1',//任务的唯一id
滴答声间隔:5,//每5滴答声运行一次(5 x间隔=5000毫秒)
totalRuns:10,//仅运行10次。(无限次省略)
回调(任务){
//每次运行时要执行的代码
log(task.name+'任务已运行'+task.currentRuns+'次');
//随时停止计时
if(someCondition())timer.stop();
//或者,如果还有其他任务,只需删除此任务
if(someCondition())timer.remove(task.id);
}
});
//启动计时器
timer.start();
在您的情况下,当用户单击以干扰数据刷新时,如果需要重新启用,还可以调用
timer.pause()
,然后调用
timer.resume()


请参阅。

声明变量以分配从setInterval(…)返回的值 并将指定的变量传递给clearInterval()

e、 g

//您可以访问上述调用clearInterval声明的计时器的任何位置

$('.htmlelement').click( function(){  // any event you want

       clearInterval(timer);// Stops or does the work
});
clearInterval()方法可用于通过setInterval()方法清除计时器集

setInterval始终返回一个ID值。可以在clearInterval()中传递该值以停止计时器。 下面是一个从30开始计时并在变为0时停止的示例

  let time = 30;
  const timeValue = setInterval((interval) => {
  time = this.time - 1;
  if (time <= 0) {
    clearInterval(timeValue);
  }
}, 1000);
let time=30;
常量时间值=设置间隔((间隔)=>{
time=this.time-1;

if(time这是我如何使用clearInterval()方法在10秒后停止计时器的

函数startCountDown(){
var countdownnumberl=document.getElementById('countdown-number');
var倒计时=10;
常量间隔=设置间隔(()=>{

倒计时=--倒计时使用setTimeOut在一段时间后停止间隔

var interVal = setInterval(function(){console.log("Running")  }, 1000);
 setTimeout(function (argument) {
    clearInterval(interVal);
 },10000);

我想下面的代码会有所帮助:

var refreshIntervalId = setInterval(fname, 10000);

clearInterval(refreshIntervalId);
您的代码100%正确…那么…有什么问题吗?或者是教程…

试试看

let refresch=()=>document.body.style='background:#'
+Math.random().toString(16.slice(-6);
设intId=设置间隔(refresch,1000);
让停止=()=>clearInterval(intId);
body{transition:1s}

Stop
在nodeJS中,您可以在setInterval函数中使用“this”特殊关键字

您可以使用thisthis关键字来清除间隔,下面是一个示例:

setInterval(
    function clear() {
            clearInterval(this) 
       return clear;
    }()
, 1000)
当您打印
var refreshIntervalId = setInterval(fname, 10000);

clearInterval(refreshIntervalId);
setInterval(
    function clear() {
            clearInterval(this) 
       return clear;
    }()
, 1000)
<div id='count'>100</div>
<button id='start' onclick='start()'>Start</button>
<button id='stop' onclick='stop()'>Stop</button>