韶子

梦想皆有神助...
javascript计时器的实现

  用Javascript实现计时器主要用到的函数是setTimeout()和clearTimeout()。把超时时间设置为1000ms,也就是每秒进行一次更新,停止计时时用clearTimeout()进行取消。

  先在.html文件中写上基本框架:

<html>
<head>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<h3 id="time">00:00</h3>
<div>
<a href="#" id="start">开始</a>&nbsp;&nbsp;<a href="#" id="stop">停止</a>
</div>
</body>
</html>

用一个全局变量c进行计数,每一秒钟执行一次c++;所以基本的想法就是用一个函数每隔1s递归一次并让c加1:

function timedCount(){    
c
=c+1;
t
=setTimeout("timedCount()",1000);
}

这样的话很容易写出script.js文件:

window.onload = initAll;
var text;
var c=0;
function initAll(){
text
= document.getElementById("time");
document.getElementById(
"start").onclick = timedCount;
document.getElementById(
"stop").onclick = stopCount;;
}
function timedCount(){
text.innerHTML
=c;
c
=c+1;
t
=setTimeout("timedCount()",1000);
return false;
}
function stopCount(){
clearTimeout(t);
c
=0;
return false;
}

但是这样的话显示的计时只是数秒,为了显示分钟,将代码改为:

//...
function timedCount(){
var m = getminute(c);
var s = getsecond(c,m);
text.innerHTML
=m+":"+s;
c
=c+1;
t
=setTimeout("timedCount()",1000);
return false;
}
function stopCount(){
clearTimeout(t);
c
=0;
return false;
}

function getminute(c){//得到分钟数
var m = parseInt(c/60);
m = checkTime(m);
return m;
}
function getsecond(c,m){//得到秒数
var s = c - m*60;
s
=checkTime(s);
return s;
}
function checkTime(i){//如果结果为个位数,则在前面补零
if (i<10)
{
i
="0" + i
}
return i
}

另外有一个问题,如果用户点过“开始”后,如果没有点“停止”而又点了一次“开始”,此时计数并不清零,而且计数速度也更快了,不再是每秒增加1。为了避免这一点,可以加一个标记判断是否已经点过“停止”,也可以用try{}catch(){}语句。此外还可以设置页面载入后只显示“开始”,而点过“开始”后则隐藏“开始”只显示“停止”。这样完整代码为:

window.onload = initAll;
var text;
var c=0;
function initAll(){
text
= document.getElementById("time");
document.getElementById(
"stop").innerHTML = ""  //隐藏“停止”
document.getElementById(
"start").onclick = timedCount;
document.getElementById(
"stop").onclick = stopCount;;
}
function timedCount(){
document.getElementById(
"start").innerHTML = "";
document.getElementById(
"stop").innerHTML = "停止"  //隐藏“开始”
var m = getminute(c);
var s = getsecond(c,m);
text.innerHTML
=m+":"+s;
c
=c+1;
t
=setTimeout("timedCount()",1000);
return false;
}
function stopCount(){
document.getElementById(
"start").innerHTML = "开始";
document.getElementById(
"stop").innerHTML = "";  //隐藏“停止”  
   clearTimeout(t);
c
=0;
return false;
}

function getminute(c){
var m = parseInt(c/60);
m = checkTime(m);
return m;
}
function getsecond(c,m){
var s = c - m*60;
s
=checkTime(s);
return s;
}
function checkTime(i){
if (i<10)
{
i
="0" + i
}
return i
}

查看实现的效果

posted on 2011-08-27 14:19  韶子  阅读(1482)  评论(0编辑  收藏  举报