多个setinterval同时运行(运行时,为什么会先执行第2个setInterval,然后再执行第1个setInterval.求帮助分析,谢谢.)

2026-04-05 15:15:01 :0

多个setinterval同时运行(运行时,为什么会先执行第2个setInterval,然后再执行第1个setInterval.求帮助分析,谢谢.)

其实多个setinterval同时运行的问题并不复杂,但是又很多的朋友都不太了解运行时,为什么会先执行第2个setInterval,然后再执行第1个setInterval.求帮助分析,谢谢.,因此呢,今天小编就来为大家分享多个setinterval同时运行的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

运行时,为什么会先执行第2个setInterval,然后再执行第1个setInterval.求帮助分析,谢谢.

你写的有问题,首先是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毫秒

dreamweaver两段js代码在浏览器中只能运行一段,估计发生冲突,求大神帮忙修改一下让两个可以同时运行

第二段
var MyMar2=setInterval(Marqu,speed)
demo11.onmouseover=function() {clearInterval(MyMar2)}
demo11.onmouseout=function() {MyMar2=setInterval(Marqu,speed)}

如何几个定时器同时开 setinterval

setTimeout()
setTimeout()方法用来指定某个函数或字符串在指定的毫秒数之后执行。它返回一个整数,表示定时器的编号,这个值可以传递给clearTimeout()用于取消这个函数的执行
以下代码中,控制台先输出0,大概过1000ms即1s后,输出定时器setTimeout()方法的返回值1
var Timer = setTimeout(function(){ console.log(Timer); },1000); console.log(0);
也可以写成字符串参数的形式,由于这种形式会造成javascript引擎两次解析,降低性能,故不建议使用
var Timer = setTimeout(’console.log(Timer);’,1000); console.log(0);
如果省略setTimeout的第二个参数,则该参数默认为0
以下代码中,控制台出现0和1,但是0却在前面,后面会解释这个疑问
var Timer = setTimeout(function(){ console.log(Timer); }); console.log(0);
实际上,除了前两个参数,setTimeout()方法还允许添加更多的参数,它们将被传入定时器中的函数中
以下代码中,控制台大概过1000ms即1s后,输出2,而IE9-浏览器只允许setTimeout有两个参数,不支持更多的参数,会在控制台输出NaN
setTimeout(function(a,b){ console.log(a+b); },1000,1,1);
可以使用IIFE传参来兼容IE9-浏览器的函数传参
setTimeout((function(a,b){ return function(){ console.log(a+b); } })(1,1),1000);
或者将函数写在定时器外面,然后函数在定时器中的匿名函数中带参数调用
function test(a,b){ console.log(a+b); } setTimeout(function(){ test(1,1); },1000);
this指向
在this机制系列已经详细介绍过this指向的4种绑定规则,由于定时器中的this存在隐式丢失的情况,且极易出错,因此在这里再次进行说明
var a = 0; function foo(){ console.log(this.a); }; var obj = { a : 2, foo:foo } setTimeout(obj.foo,100);//0 //等价于 var a = 0; setTimeout(function foo(){ console.log(this.a); },100);//0
若想获得obj对象中的a属性值,可以将obj.foo函数放置在定时器中的匿名函数中进行隐式绑定
var a = 0; function foo(){ console.log(this.a); }; var obj = { a : 2, foo:foo } setTimeout(function(){ obj.foo(); },100);//2
或者也可以使用bind方法将foo()方法的this绑定到obj上
var a = 0; function foo(){ console.log(this.a); }; var obj = { a : 2, foo:foo } setTimeout(obj.foo.bind(obj),100);//2
clearTimeout()
setTimeout函数返回一个表示计数器编号的整数值,将该整数传入clearTimeout函数,取消对应的定时器
//过100ms后,控制台输出setTimeout()方法的返回值1 var Timer = setTimeout(function(){ console.log(Timer); },100);
于是可以利用这个值来取消对应的定时器
var Timer = setTimeout(function(){ console.log(Timer); },100); clearTimeout(Timer);
或者直接使用返回值作为参数
var Timer = setTimeout(function(){ console.log(Timer); },100); clearTimeout(1);
一般来说,setTimeout返回的整数值是连续的,也就是说,第二个setTimeout方法返回的整数值比第一个的整数值大1
//控制台输出1、2、3 var Timer1 = setTimeout(function(){ console.log(Timer1); },100); var Timer2 = setTimeout(function(){ console.log(Timer2); },100); var Timer3 = setTimeout(function(){ console.log(Timer3); },100);
setInterval()
setInterval的用法与setTimeout完全一致,区别仅仅在于setInterval指定某个任务每隔一段时间就执行一次,也就是无限次的定时执行
《button id="btn"》0《/button》 《script》 var timer = setInterval(function(){ btn.innerHTML = Number(btn.innerHTML) + 1; },1000); btn.onclick = function(){ clearInterval(timer); btn.innerHTML = 0; } 《/script》
HTML5标准规定,setTimeout的最短时间间隔是4毫秒;setInterval的最短间隔时间是10毫秒,也就是说,小于10毫秒的时间间隔会被调整到10毫秒
大多数电脑显示器的刷新频率是60HZ,大概相当于每秒钟重绘60次。因此,最平滑的动画效的最佳循环间隔是1000ms/60,约等于16.6ms
为了节电,对于那些不处于当前窗口的页面,浏览器会将时间间隔扩大到1000毫秒。另外,如果笔记本电脑处于电池供电状态,Chrome和IE 9以上的版本,会将时间间隔切换到系统定时器,大约是16.6毫秒
运行机制
下面来解释前面部分遗留的疑问,为什么下面代码的控制台结果中,0出现在1的前面呢?
setTimeout(function(){ console.log(1); }); console.log(0);
实际上,把setTimeout的第二个参数设置为0s,并不是立即执行函数的意思,只是把函数放入代码队列
在下面这个例子中,给一个按钮btn设置了一个事件处理程序。事件处理程序设置了一个250ms后调用的定时器。点击该按钮后,首先将onclick事件处理程序加入队列。该程序执行后才设置定时器,再有250ms后,指定的代码才被添加到队列中等待执行
btn.onclick = function(){ setTimeout(function(){ console.log(1); },250); }
如果上面代码中的onclick事件处理程序执行了300ms,那么定时器的代码至少要在定时器设置之后的300ms后才会被执行。队列中所有的代码都要等到JavaScript进程空闲之后才能执行,而不管它们是如何添加到队列中的
如图所示,尽管在255ms处添加了定时器代码,但这时候还不能执行,因为onclick事件处理程序仍在运行。定时器代码最早能执行的时机是在300ms处,即onclick事件处理程序结束之后
setInterval的问题
使用setInterval()的问题在于,定时器代码可能在代码再次被添加到队列之前还没有完成执行,结果导致定时器代码连续运行好几次,而之间没有任何停顿。而javascript引擎对这个问题的解决是:当使用setInterval()时,仅当没有该定时器的任何其他代码实例时,才将定时器代码添加到队列中。这确保了定时器代码加入到队列中的最小时间间隔为指定间隔
但是,这样会导致两个问题:1、某些间隔被跳过;2、多个定时器的代码执行之间的间隔可能比预期的小
假设,某个onclick事件处理程序使用serInterval()设置了200ms间隔的定时器。如果事件处理程序花了300ms多一点时间完成,同时定时器代码也花了差不多的时间,就会同时出现跳过某间隔的情况
例子中的第一个定时器是在205ms处添加到队列中的,但是直到过了300ms处才能执行。当执行这个定时器代码时,在405ms处又给队列添加了另一个副本。在下一个间隔,即605ms处,第一个定时器代码仍在运行,同时在队列中已经有了一个定时器代码的实例。结果是,在这个时间点上的定时器代码不会被添加到队列中
迭代setTimeout
为了避免setInterval()定时器的问题,可以使用链式setTimeout()调用
setTimeout(function fn(){ setTimeout(fn,interval); },interval);
这个模式链式调用了setTimeout(),每次函数执行的时候都会创建一个新的定时器。第二个setTimeout()调用当前执行的函数,并为其设置另外一个定时器。这样做的好处是,在前一个定时器代码执行完之前,不会向队列插入新的定时器代码,确保不会有任何缺失的间隔。而且,它可以保证在下一次定时器代码执行之前,至少要等待指定的间隔,避免了连续的运行
使用setInterval()
《div id="myDiv" style="height: 100px;width: 100px;background-color: pink;position:absolute;left:0;"》《/div》 《script》 myDiv.onclick = function(){ var timer = setInterval(function(){ if(parseInt(myDiv.style.left) 》 200){ clearInterval(timer); return false; } myDiv.style.left = parseInt(myDiv.style.left) + 5 + ’px’; },16); } 《/script》
使用链式setTimeout()
《div id="myDiv" style="height: 100px;width: 100px;background-color: pink;position:absolute;left:0;"》《/div》 《script》 myDiv.onclick = function(){ setTimeout(function fn(){ if(parseInt(myDiv.style.left) 《= 200){ setTimeout(fn,16); }else{ return false; } myDiv.style.left = parseInt(myDiv.style.left) + 5 + ’px’; },16); } 《/script》
应用
使用定时器来调整事件发生顺序
【1】网页开发中,某个事件先发生在子元素,然后冒泡到父元素,即子元素的事件回调函数,会早于父元素的事件回调函数触发。如果,我们先让父元素的事件回调函数先发生,就要用到setTimeout(f, 0)
正常情况下,点击div元素,先弹出0,再弹出1
《div id="myDiv" style="height: 100px;width: 100px;background-color: pink;"》《/div》 《script》 myDiv.onclick = function(){ alert(0); } document.onclick = function(){ alert(1); } 《/script》
如果进行想让document的onclick事件先发生,即点击div元素,先弹出1,再弹出0。则进行如下设置
《div id="myDiv" style="height: 100px;width: 100px;background-color: pink;"》《/div》 《script》 myDiv.onclick = function(){ setTimeout(function(){ alert(0); }) } document.onclick = function(){ alert(1); } 《/script》
【2】用户自定义的回调函数,通常在浏览器的默认动作之前触发。比如,用户在输入框输入文本,keypress事件会在浏览器接收文本之前触发。因此,下面的回调函数是达不到目的
《input type="text" id="myInput"》 《script》 myInput.onkeypress = function(event) { this.value = this.value.toUpperCase(); } 《/script》
上面代码想在用户输入文本后,立即将字符转为大写。但是实际上,它只能将上一个字符转为大写,因为浏览器此时还没接收到文本,所以this.value取不到最新输入的那个字符
只有用setTimeout改写,上面的代码才能发挥作用
《input type="text" id="myInput"》 《script》 myInput.onkeypress = function(event) { setTimeout(function(){ myInput.value = myInput.value.toUpperCase(); }); } 《/script》
代码到此结束。下篇给大家介绍
BOM系列第二篇之定时器requestAnimationFrame
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
以上所述是小编给大家介绍的BOM系列第一篇之定时器setTimeout和setInterval ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

程序中多个回调函数是同时执行的吗

做JQuery效果时,要在一个效果后执行一段代码,
本身jquery动画都有回调函数,。
当我们想要在页面同时执行多个动画效果之后或者之前怎么来执行一段代码呢,首先我们想到的肯定 是执行代码的条件。也就是我们怎么能判断多个不懂得效果都执行完了,或者都没执行。
:animated
然后用 $(".box").is(":animated") 来判断;
用定时器来实现代码如下:
代码
var wait=setInterval(function(){
if(!$(".box").is(":animated")){
clearInterval(wait);
//执行code
alert("动画都已经执行完!");
}
},200);

js中能不能开启两个window.setInterval

可以。
是可以设置多个interval的,但是其实内部运行还是单线程,也是有时差的,不是多线程同时执行的。一般肉眼还是看不出来,毕竟cpu的运算速度太快了。可以用多个,不过用多了感觉cpu占用会明显变多,能少用就少用。

关于多个setinterval同时运行到此分享完毕,希望能帮助到您。

多个setinterval同时运行(运行时,为什么会先执行第2个setInterval,然后再执行第1个setInterval.求帮助分析,谢谢.)

本文编辑:admin

更多文章:


python怎么(python怎么)

python怎么(python怎么)

“python怎么”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看python怎么(python怎么)!本文目录python怎么python 如何获取一个文件夹内包括子文件夹所有文件的名字和路径python怎么操作多维数组元

2025年6月29日 10:15

从dnf关服开始当神豪(DNF”十个战法九个豪,还有一个是神豪“这句话还适用么)

从dnf关服开始当神豪(DNF”十个战法九个豪,还有一个是神豪“这句话还适用么)

大家好,从dnf关服开始当神豪相信很多的网友都不是很明白,包括DNF”十个战法九个豪,还有一个是神豪“这句话还适用么也是一样,不过没有关系,接下来就来为大家分享关于从dnf关服开始当神豪和DNF”十个战法九个豪,还有一个是神豪“这句话还适用

2025年7月9日 05:45

method中文翻译(请问teaching approach和teaching method的区别)

method中文翻译(请问teaching approach和teaching method的区别)

各位老铁们,大家好,今天由我来为大家分享method中文翻译,以及请问teaching approach和teaching method的区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动

2025年12月5日 13:45

compoundbutton(Android上层怎么读写proc节点)

compoundbutton(Android上层怎么读写proc节点)

本篇文章给大家谈谈compoundbutton,以及Android上层怎么读写proc节点对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录Android上层怎么读写proc节点android studio switch控件怎么

2025年10月24日 03:45

dictate中文(史料类型有几种)

dictate中文(史料类型有几种)

本篇文章给大家谈谈dictate中文,以及史料类型有几种对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录史料类型有几种有dict的英语单词e

2026年1月13日 17:15

html5论坛源码(怎么把html5源码放到微信公共号上)

html5论坛源码(怎么把html5源码放到微信公共号上)

本篇文章给大家谈谈html5论坛源码,以及怎么把html5源码放到微信公共号上对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录怎么把html

2026年1月23日 06:30

kubernetes源码剖析pdf(client-go 源码分析)

kubernetes源码剖析pdf(client-go 源码分析)

本篇文章给大家谈谈kubernetes源码剖析pdf,以及client-go 源码分析对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录client-go 源码分析【Flink on k8s】高可用的关键机制及configmap

2025年12月3日 03:00

工商营业执照怎么网上年审(工商营业执照怎么网上年审)

工商营业执照怎么网上年审(工商营业执照怎么网上年审)

今天给各位分享工商营业执照怎么网上年审的知识,其中也会对工商营业执照怎么网上年审进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录工商营业执照怎么网上年审年检营业执照在网上怎么检工商营业执照怎么网上年审工商营业执

2026年8月5日 23:15

plc编程有前景吗(PLC前景如何)

plc编程有前景吗(PLC前景如何)

大家好,plc编程有前景吗相信很多的网友都不是很明白,包括PLC前景如何也是一样,不过没有关系,接下来就来为大家分享关于plc编程有前景吗和PLC前景如何的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录PLC前景

2026年1月26日 01:00

html的全局属性(HTML常用属性)

html的全局属性(HTML常用属性)

这篇文章给大家聊聊关于html的全局属性,以及HTML常用属性对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录HTML常用属性html标签都有哪些属性HTML title 属性html5新增的全局属性有哪几个描述其主要功能在h

2025年9月6日 19:00

设计模板设置为暗香扑面(计算机ppt怎么幻灯片模板为暗香扑鼻)

设计模板设置为暗香扑面(计算机ppt怎么幻灯片模板为暗香扑鼻)

这篇文章给大家聊聊关于设计模板设置为暗香扑面,以及计算机ppt怎么幻灯片模板为暗香扑鼻对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录计算机ppt怎么幻灯片模板为暗香扑鼻如何设置ppt文档设计主题为暗香扑面怎么用暗香扑面模板修

2026年7月29日 00:30

acesse会员登录中(什么是acesse)

acesse会员登录中(什么是acesse)

本篇文章给大家谈谈acesse会员登录中,以及什么是acesse对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录什么是acessehttps

2025年7月18日 16:30

malloc前面的是什么(malloc后面括号里面是什么)

malloc前面的是什么(malloc后面括号里面是什么)

今天给各位分享malloc后面括号里面是什么的知识,其中也会对malloc后面括号里面是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录malloc后面括号里面是什么增加链表节点,用malloc函数开辟空间

2026年2月14日 12:30

java设置excel自动调整行高(excel自动调整行高)

java设置excel自动调整行高(excel自动调整行高)

本篇文章给大家谈谈java设置excel自动调整行高,以及excel自动调整行高对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录excel自

2026年3月20日 00:30

shield翻译(帮忙翻译几个简单的英文短语!急用!)

shield翻译(帮忙翻译几个简单的英文短语!急用!)

各位老铁们,大家好,今天由我来为大家分享shield翻译,以及帮忙翻译几个简单的英文短语!急用!的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录帮忙

2026年1月30日 08:45

公司注册网站流程(公司网上注册流程是如何的)

公司注册网站流程(公司网上注册流程是如何的)

今天给各位分享公司网上注册流程是如何的的知识,其中也会对公司网上注册流程是如何的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录公司网上注册流程是如何的网上注册公司的流程网上注册公司流程网上公司注册流程新公司网

2025年9月19日 15:00

arraylist和array区别(ArraryList,Array string[]的差别是什么)

arraylist和array区别(ArraryList,Array string[]的差别是什么)

“arraylist和array区别”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看arraylist和array区别(ArraryList,Array string[]的差别是什么)!本文目录ArraryList,Arra

2026年1月4日 01:00

量化python培训(Python学习,量化交易的应该怎么学)

量化python培训(Python学习,量化交易的应该怎么学)

各位老铁们好,相信很多人对量化python培训都不是特别的了解,因此呢,今天就来为大家分享下关于量化python培训以及Python学习,量化交易的应该怎么学的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录Pyt

2026年8月30日 15:30

一个完整的html代码架构(急求HTML格式完整网页框架代码)

一个完整的html代码架构(急求HTML格式完整网页框架代码)

大家好,关于一个完整的html代码架构很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于急求HTML格式完整网页框架代码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所

2025年6月13日 14:15

数据库管理系统与操作系统(在层次结构上,操作系统处于数据库管理系统的上层吗)

数据库管理系统与操作系统(在层次结构上,操作系统处于数据库管理系统的上层吗)

“数据库管理系统与操作系统”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看数据库管理系统与操作系统(在层次结构上,操作系统处于数据库管理系统的上层吗)!本文目录在层次结构上,操作系统处于数据库管理系统的上层吗操作系统编译程序

2026年9月23日 04:00

近期文章

ilitate(imitate意思是)
2026-09-25 23:30:01
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索