停止setinterval(js停止setInterval 调用)
一、JS关于中止setInterval()的方法,为什么会进入死循环呢
setInterval()自动执行,一般写的话是这样的:
var auto=setInterval(function(){
var i=0;
i++;
if(i==200){
clearInterval(auto);
}
},20)
setInterval(要执行函数名,毫秒数);
一般在第一个是写一个匿名函数,在匿名函数里面再写要执行的函数就是function(){
函数1;
函数2;
}
我没有写函数直接在匿名函数里面写了代码,你也可以写在外面
function kaishi(){
var i=0;
i++;
if(i==200){
clearInterval(auto);
}
var auto=setInterval(function(){
kaishi();
}
},20)
setInterval是创建自动执行(参数是执行函数,执行间隔时间),clearInterval是清除之前创建的(参数就是之前创建的变量),
二、js代码,关于setInterval无法停止的问题!
那是因为,js在,var是声明变量
但有点不同的是,看是在哪里声明,
如果,var是在函数方法function之内声明的,那变量只作用于该函数本身
如果是在函数方法之外声明的,那就是全局变量,无论在函数内函数外都能起作用(当然,在声明之前的代码是作用不到的)
根据这个原理
clearInterval(s)这个s根本就不存在!
改正如下:
<script>
vars,b=0;
functionrun(){s=setInterval("a()",40)}
functiona(){
vari=document.body.scrollTop,i=i*0.5;
window.scrollTo(0,i)
if(b<6){
b++;
}else{
clearInterval(s)
}
}
</script>
哦,你要有个错误
就是在被循环的函数内声明变量b,并且赋值为0;
那么,这个函数每运行一次,无论b的值是多少,是不是用于都会被归为0呢?
是不是永远的是小于6呢?
既然是小于6,那有怎么会停止呢?
三、js timer启动两次怎么停止呀
楼主你首先得分清setInterval和setTimeout的区别。
var handler=setInterval(action, intervalTime):从运行这行代码开始,每隔intervalTime(单位是毫秒)的时间就把action执行一次,直到运行至调用clearInterval(handler)为止。
var handler= setTimeout(action, delayTime):从运行这行代码开始计时,等到delayTime(单位是毫秒)的时刻立即把action执行一次。在没到达delayTime时刻之前你可以调用clearTimeout(handler)来清除这次调用。
现在来看你的问题,
1.为啥timer还可以用?
var timer;
timer= window.setInterval("Readcadetimer()", 1000);
你定义了一个timer变量,然后将计时器的句柄赋给它(此处的timer变量实际上就是我上面说的handler,是定时器的句柄)。运行至此处则每隔1秒(1000毫秒)运行Readcadetimer()一次。
你在没有将该定时器清除的情况下,又写了一句:
timer= window.setInterval("Readcadetimer()", 1000);
这时候你又创建了一个定时器,然后将句柄赋给了timer,第一个定时器的句柄虽然再也没有索引了,但是它实实在在存在。第二个定时器的作用仍然是每隔1秒(1000毫秒)运行Readcadetimer()一次。
下一句clearInterval(timer);
这句将你创建的第二个计时器给清除了,但是第一个计时器还在运行,所以你觉得好像timer还可以用一样。
2. timer这个数字代表啥意思?
timer没啥意思,他就是一个持有计时器对象的句柄,就相当于你想用你之前创建的计时器的时候,你可以通过timer找到它。
看你的代码需求貌似是想要把Readcadetimer()执行两次然后就结束,这里奉上代码。
请将你Readcadetimer()的定义放在我的代码之前。
varcounter=0,
handler=setInterval(function(){
counter++;
if(counter>2){
clearInterval(handler);
return;
}
Readcadetimer()
},1000);