首页建站多个setinterval(一个页面多个setInterval应该怎么办?)

多个setinterval(一个页面多个setInterval应该怎么办?)

编程之家2024-01-27160次浏览

一、js 中 setInterval的执行次数问题

虽然是老问题了,但是好像没看到有人解释一下为什么出错,上来给大家补一个

多个setinterval(一个页面多个setInterval应该怎么办?)

setInterval被包含在Interval所调用的函数里了,这就意味着每次循环,都会再启动一个Interval

也就是说,第一次的循环

timeDao--;

计数100- 1= 99

并且添加一个新的循环(当前有 2个循环进程)

第二次循环

99- 1= 98

多个setinterval(一个页面多个setInterval应该怎么办?)

98- 1= 97

并且两个现有循环各添加一个新的循环(当前有 4个循环进程)

第三次循环

97- 1= 96

96- 1= 95

95- 1= 94

多个setinterval(一个页面多个setInterval应该怎么办?)

94- 1= 93

...(不用再往下写了,相信已经说明了问题)

以下为修改代码:

<scripttype="text/javascript">

varsh=null;//时钟对象

vartimeDao=100;//计数器

//FUNCTION::dao()

//计数递减函数

functiondao(){

divD.innerText=timeDao;

if(timeDao==0){

if(sh!=null)clearInterval(sh);

sh=null;

return;

}

timeDao--;

}

//FUNCTION::startsh()

//启动计时器

functionstartsh(){

sh=setInterval("dao()",1000);

}

</script>

<divid="divD"onclick="startsh()">sdfa</div>

二、运行时,为什么会先执行第2个setInterval,然后再执行第1...

你写的有问题,首先是for循环里有两个setlnterval,按你的想法就是先执行完第一个再执行第二个,这是for循环,当他到第一个setlnterval时,第一个setlnterval只是25毫秒执行一次,但这个for循环不会等到他执行完,而是直接返回,然后再循环跑到第二个,

这还没完当他跑到第二个时赋值k=380;

var x= setInterval(function s(){k<=380?o.style.height=(k+=10)+"px":clearInterval(x);},25)}

这是第一个,按说第一个k的应该是10或20,但是错了第一个setlnterval在执行行的时候直接用的是第二个setlnterval里面定义的k了,(变量重名了,还有变量的作用域和优先级),这时两个都在运行了,你看到的是只有第二个在走是因为第一个div的高一直在用第二个div的高,虽然他自己也+10,但第二个比第一个快5毫秒,你根本看不见第一个的变化,太快了,以至于第二个完了,k这时等于0了,所以你看到的是第一个才开始运行

改成2000第一无法运行,是因为他(第一个setlnterval)已满足条件了,k已经定于380,他(第一个setlnterval)就停止,

上边为什么会运行,就是你设的时间,第二个比第一个快5毫秒

三、js setInterval怎么设置执行次数

settimeout(执行函数,时间)能满足你的要求,setinterval(执行函数,时间)不行。

因为settimeout只运行一次而setinterval多次运行,每次timeout后再调用一次自己也就达到了多次运行的效果,并且每次调用的时间间隔可以不一样

var

timer=1000;//这里定义一个全局变量,其它地方可能修改它

t=function(){

//your

code

here

//do

something

timer+=10;//在这修改timer,当然,你在外面修改的话就把这个注释掉

settimeout(t,timer);//再次调用

}

settimeout(t,timer);//全局调用一次。

太多http重定向(HTTP重定向过多)赛门铁克卸载密码(赛门铁克卸载密码忘记了)