Js_log2000_两种定时器的异同
来源:互联网 发布:nginx 多域名别名 编辑:程序博客网 时间:2024/06/05 04:54
javascript中的两种定时器异同辨析
javascript; setInterval(); setTimeout();
javascript中有两种定时器,一种是setInterval(), 一段时间执行一次代码;另一种是setTimeout(),到达一定时间时执行一次代码
相信(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)上面这句话已经很清晰地展示出了两种定时器的区别。
为什么javascript中定时器这么重要呢?因为javascript是单线程的,严格按照页面加载顺序进行执行。而且javascript中没有我们熟悉的sleep()或者pause()这类函数。所以定时器的应用范围很广。
特别是在使用canvas时,如果想要实现动态效果,定时器必不可少!
下面以实现canvas动态效果为例介绍两种定时器的用法。
setInterval()
setInterval(code,millisec)code 必需。要调用的函数或要执行的代码串。millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。setInterval("dynamicDrawLines_1(x,y,n)",300);var i1=1;function dynamicDrawLines_1(x,y,n){ var itvl=1; var canvas1 = document.getElementById("canvas"); var ctx1 = canvas1.getContext("2d"); ctx1.beginPath(); ctx1.strokeStyle="#FFA500";//orange ctx1.moveTo(x[i1],y[i1]); ctx1.lineTo(x[i1+itvl],y[i1+itvl]); ctx1.stroke(); ctx1.closePath(); itvl++; i1++;}
上面代码的效果就是每隔一段时间绘制一条边,直到i1到达数组x、y的末尾。
setInterval()对应一个终止函数clearInterval()
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
我这里没有使用claerInterval(),因为没有可以传递需求,我不需要手动终止过程,所以我没有用。
setTimeout()
setTimeout(code,millisec)code 必需。要调用的函数后要执行的 JavaScript 代码串。millisec 必需。在执行代码前需等待的毫秒数。setTimeout("xorLines(x,y,n)",n*500);(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)setTimeout("xorLines(x,y,n)",n*500+500);setTimeout("xorLines(x,y,n)",n*500+700);setTimeout("xorLines(x,y,n)",n*500+900);function xorLines(x,y,n){ var canvas9 = document.getElementById("canvas"); var ctx9 = canvas9.getContext("2d"); for(var i = 2;i<n;i++){ for(var j=i+1;j<=n;j++){ ctx9.beginPath(); ctx9.strokeStyle="#FFFFFF"; ctx9.globalCompositeOperation="xor"; ctx9.moveTo(x[i],y[i]); ctx9.lineTo(x[j],y[j]); ctx9.stroke(); ctx9.closePath(); } }}
上面代码的效果就是到达一定时间时清理一次画布,到达另一个时刻再清理一次画布。setTimeout()的好处是可以确定代码执行次数,次数达到立即结束绝不多执行。(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
setTimeout()可以产生类似setInterval()的效果,只要
setTimeout("xorLines(x,y,n)",500);function xorLines(x,y,n){ var canvas9 = document.getElementById("canvas"); var ctx9 = canvas9.getContext("2d"); for(var i = 2;i<n;i++){(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved) for(var j=i+1;j<=n;j++){ ... setTimeout("xorLines(x,y,n)",500); ... } }}
在循环中再加入一个setTimeout,就会递归执行下去。但这种同样十分危险,因为无法关闭,会永远执行下去,
就像一个死循环一样,直到爆栈或者浏览器宕机。
在我的使用中,发现setInterval()与循环有冲突,尚不清楚是逻辑的冲突还是我代码的错误。但在使用中还是尽量避免setInterval()函数定时执行的代码中包含循环,因为setInterval()本事已经自动有循环执行的意义在里面了。我编写的时候就是,达不到想要实现的效果。也许后期我会再回到这个问题,并更新一下这个博客。但当前为止,我暂时将这个问题挂起了。
(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)
visitor tracker
This is my No.100 original blogs, yeah! And 360 days ago I published my first blog. So my blog is coming to its one-year-birthday. Happy Birthday and happy anniversary buddy! We shall continue to thrive, I know we will.
- Js_log2000_两种定时器的异同
- avr串口通信和定时器产生矛盾(两种中断方法声明的异同)
- js的两种定时器
- Spring 的两种定时器
- 两种定时器的封装
- spring学习系列 -- 定时器三 两种定时器的比较
- spring学习系列 -- 定时器三 两种定时器的比较
- spring学习系列 -- 定时器三 两种定时器的比较
- 两种spring的定时器的实现
- 页面跳转的的两种方式的异同
- 合并两个数组的两种方式的异同
- PHP合并两个数组的两种方式的异同
- Spring定时器的两种实现方式
- Spring定时器的两种实现方式
- Spring定时器的两种实现方式
- spring定时器的两种实现方式
- Spring定时器的两种实现方式
- Spring定时器的两种实现方式
- Qt Charts编译和使用
- CRC循环冗余校验码
- xml基础知识(3)
- GDB 调试出现:Couldn't find general-purpose registers in core file
- docker web-GUI DockerUI和Shipyard对比
- Js_log2000_两种定时器的异同
- docker容器中搭建kafka集群环境
- slice splice split
- LINQ语句
- CentOS Linux Various Versions Meaning
- 你所不知的 CSS ::before 和 ::after 伪元素用法
- Python把对应格式的csv文件转换成字典类型存储脚本
- Shapefile导入数据库 c#
- Qt打开图片,维持原宽高比,适应窗口