继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用setTimeout()方法实现计时器

garnett555
关注TA
已关注
手记 2
粉丝 1
获赞 88

这篇文章介绍一下如何通过setTimeout()方法实现计时器,原理很简单,笔者通过这篇文章,也顺便梳理一下自己的知识。
超时调用需要使用window对象的setTimeout()方法,它接受两个参数:要执行的代码和以毫秒表示的时间。——摘录自《JavaScript高级程序设计》
先附上html部分的代码,很简单,只是一个文本框表单。

<form>
<input type="text" id="count" />
</form>

要想实现计时器,原理很简单,就是让文本框中的数字每隔一秒增加1就好了。通过document.getElementById("count").value可以获取文本框的数值,进而也可以为其赋值。我们先介绍一下第一种方法。

<head>
<script type="text/javascript">
  var num=0;
  function startCount() {
    document.getElementById('count').value=num;
    num=num+1;  
    setTimeout("startCount()",1000);
  }
    setTimeout("startCount()",1000);
</script>
</head>

怎么样,原理很简单吧,脚本中最后一行之所以要对函数startCount做超时调用,是因为,如果立即调用,即把这一行代码替换成startCount()的话,因为脚本是添加在head标签内,而调用函数的时候,body标签内部的代码还没有加载完,解析器找不到id为conut的元素,也就无法为文本框赋值了。
那么是不是只能超时调用呢?很显然不是,接下来就是第二种方法。

<head>
<script type="text/javascript">
  var num=0;
  window.onload=startCount;
  function startCount() {
    document.getElementById('count').value=num;
    num=num+1;
    setTimeout("startCount()",1000); 
  }
</script>
</head>

既然刚刚的方式body标签内部的代码还没有加载完,那么等页面加载完再执行函数不就ok了?所以这里通过window.onload=startCount也可以实现功能。
那么,最终的第三种方法,相信不用我说大家也都知道了,就是将脚本代码从head标签中转移到body标签内的底部,即等页面元素都加载完成之后再执行脚本。

<body>
<form>
<input type="text" id="count" />
</form>
<script type="text/javascript">
  var num=0;
  function startCount() {
    document.getElementById('count').value=num;
    num=num+1;  
    setTimeout("startCount()",1000);
  }
   startCount();
</script>
</body>

其实并不是三种方法[破涕为笑],只是各自实现形式略微有些差异,希望能给和我一样的新手们带来启发, 同时也当做对自己学习的检验和知识的梳理。

打开App,阅读手记
7人推荐
发表评论
随时随地看视频慕课网APP