浅谈JavaScript的计时器对象


Posted in Javascript onDecember 26, 2016

1、JavaScript计时器,我们可以在设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。

计时器类型:

1)一次性计时器:仅在指定的延迟时间之后触发一次。

2)间隔性触发计时器:每隔一定的时间间隔就触发一次。

计时器方法:

1)setInterval() :在执行时,从载入页面后每隔指定的时间执行代码。

浅谈JavaScript的计时器对象

//语法
setInterval(代码,交互时间);

//参数说明:1. 代码:要调用的函数或要执行的代码串。2. 交互时间:周期性执行或调用表达式之间的时间间隔,以毫秒计(1s=1000ms)。

//返回值:一个可以传递给 clearInterval() 从而取消对"代码"的周期性执行的值。

//调用函数格式:(假设有一个clock()函数):
setInterval("clock()",1000)
//或
setInterval(clock,1000)

//例子
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
<script type="text/javascript">
 var int=setInterval(clock, 1000)//调用计时器
 function clock(){
  var time=new Date();
  document.getElementById("clock").value = time;
 }
</script>
</head>
<body>
 <form>
  <input type="text" id="clock" size="50" />
 </form>
</body>
</html>

 2)取消计时器clearInterval():clearInterval() 方法可取消由 setInterval() 设置的交互时间。

//语法
clearInterval(id_of_setInterval)

//参数说明:id_of_setInterval:由 setInterval() 返回的 ID 值。

//例子
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>计时器</title>
<script type="text/javascript">
  function clock(){
   var time=new Date();           
   document.getElementById("clock").value = time;
  }
// 每隔100毫秒调用clock函数,并将返回值赋值给i
   var i=setInterval("clock()",100);
</script>
</head>
<body>
 <form>
  <input type="text" id="clock" size="50" />
  <input type="button" value="Stop" onclick="clearInterval(i)" />
 </form>
</body>
</html>
//每隔 100 毫秒调用 clock() 函数,并显示时间。当点击按钮时,停止时间

3) setTimeout()计时器,在载入后延迟指定时间后,去执行一次表达式,仅执行一次。

//语法
setTimeout(代码,延迟时间);

//参数说明:1. 要调用的函数或要执行的代码串。2. 延时时间:在执行代码前需等待的时间,以毫秒为单位(1s=1000ms)。

//例子1
//打开网页3秒后,在弹出一个提示框
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
 setTimeout("alert('Hello!')", 3000 );
</script>
</head>
<body>
</body>
</html>

//例子2
//当按钮start被点击时,setTimeout()调用函数,在5秒后弹出一个提示框
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
function tinfo(){
 var t=setTimeout("alert('Hello!')",5000);
 }
</script>
</head>
<body>
<form>
 <input type="button" value="start" onClick="tinfo()">
</form>
</body>
</html>

//例子3
//创建一个运行于无穷循环中的计数器,需要编写一个函数来调用其自身。在下面的代码,当按钮被点击后,输入域便从0开始计数
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var num=0;
function numCount(){
 document.getElementById('txt').value=num;
 num=num+1;
 setTimeout("numCount()",1000);
 }
</script>
</head>
<body>
<form>
<input type="text" id="txt" />
<input type="button" value="Start" onClick="numCount()" />
</form>
</body>
</html>

4) 取消计时器clearTimeout(), setTimeout()和clearTimeout()一起使用,停止计时器。

//语法
clearTimeout(id_of_setTimeout)

//参数说明:id_of_setTimeout:由 setTimeout() 返回的 ID 值。该值标识要取消的延迟执行代码块。

//例子:添加了一个 "Stop" 按钮来停止这个计数器
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
 var num=0,i;
 function timedCount(){
  document.getElementById('txt').value=num;
  num=num+1;
  i=setTimeout(timedCount,1000);
 }
  setTimeout(timedCount,1000);
 function stopCount(){
  clearTimeout(i);
 }
</script>
</head>
<body>
 <form>
  <input type="text" id="txt">
  <input type="button" value="Stop" onClick="stopCount()">//停止按钮
 </form>
</body>
</html>

setinterval与settimeout区别:

1)因为setTimeout(表达式,延时时间)在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次;而setInterval(表达式,交互时间)则不一样,它从载入后,每隔指定的时间就执行一次表达式 所以,完全是不一样的

2)很多人习惯于将setTimeout包含于被执行函数中,然后在函数外再次使用setTimeout来达到定时执行的目的;这样,函数外的setTimeout在执行函数时再次触发setTimeout从而形成周而复始的定时效果。

3)使用的时候各有各的优势,使用setInterval,需要手动的停止tick触发。而使用方法中嵌套setTimeout,可以根据方法内部本身的逻辑不再调用setTimeout就等于停止了触发。

//setTimeout例子
showTime();
function showTime(){
  var day = new Date();
  alert("时间是: " + day.toString());
  setTimeout("showTime()", 1000);
}

//setInterval例子
setInterval("showTime()", 1000);
function showTime(){
  var day = new Date();
  alert("时间是: " + day.toString());
}

这两种方法可能看起来非常像,而且显示的结果也会很相似,不过两者的最大区别就是,setTimeout方法不会每隔1秒钟就执行一次showTime函数,它是在每次调用setTimeout后过1秒钟再去执行showTime函数。这意味着如果showTime函数的主体部分需要2秒钟执行完,那么整个函数则要每3秒钟才执行一次。而setInterval却没有被自己所调用的函数所束缚,它只是简单地每隔一定时间就重复执行一次那个函数。

如果要求在每隔一个固定的时间间隔后就精确地执行某动作,那么最好使用setInterval,而如果不想由于连续调用产生互相干扰的问题,尤其是每次函数的调用需要繁重的计算以及很长的处理时间,那么最好使用setTimeout。

如果对计时函数不加以处理,那么setInterval将会持续执行相同的代码,一直到浏览器窗口关闭,或者用户转到了另外一个页面为止。不过还是有办法可以终止setTimeout和setInterval函数的执行。

以上就是小编为大家带来的浅谈JavaScript的计时器对象全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
基于jquery的一个图片hover的插件
Apr 24 Javascript
javascript开发随笔二 动态加载js和文件
Nov 25 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
Jun 21 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
Oct 09 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
小程序如何写动态标签的实现方法
Feb 05 Javascript
Vue Router中应用中间件的方法
Aug 06 Javascript
js实现简单的无缝轮播效果
Sep 05 Javascript
js模糊查询实例分享
Dec 26 #Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 #Javascript
jQuery实现可移动选项的左右下拉列表示例
Dec 26 #Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 #Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
Dec 26 #Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 #Javascript
原生JS实现图片轮播效果
Dec 26 #Javascript
You might like
一个MYSQL操作类
2006/11/16 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
php实现session共享的实例方法
2019/09/19 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
python3.7 的新特性详解
2019/07/25 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
Django实现图片上传功能步骤解析
2020/04/22 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
工程项目经理岗位职责
2013/12/15 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
领导干部考核评语
2015/01/04 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL