JavaScript 定时器使用

时间:2022-08-09 00:22:58

定时器:让网页无人值守的自动执行操作
何时使用:
只要希望网页无人值守时,也可执行操作,就必须使用定时器

2种:
1. 周期性定时器:按照一定时间间隔,反复执行相同任务
何时使用周期性定时器:连续移动或连续变化
2. 一次性定时器:先等待一定时间,再执行一次!自动结束
何时使用一次性定时器:先等待,再执行一次时

如何使用定时器:3件事
1. 每次做什么事:function*
2. 何时开始,间隔多长时间
var timer=null;//一般定义在全局,保存线程号
语法:timer=setInterval(方法名,间隔毫秒数)
1. 创建异步子线程,不影响主线程的操作
2. 返回新子线程的线程号
3. 立刻启动定时器
事件:window.onload=function(){…}
页面加载完成后触发
3. 何时结束:
clearInterval(timer);
timer=null;

一次性定时器用法和周期性定时器用法完全一样!
var timer=null;//全局的
启动:timer=setTimeout(方法名,等待的毫秒数);
停止:(取消等待)clearTimerout(timer); timer=null;

以下是一个用计时器完成的一个小案例:计算当前时间距离放学时间的倒计时程序

HTML代码如下:

<!DOCTYPE html>
<html>
<head>
<title>倒计时</title>
<meta charset="utf-8"/>
<script src="js/4_1.js"></script>
</head>

<body>
<h1>距离放学还有<span id="time"></span></h1>
<button id="btn">停止倒计时</button>
</body>
</html>

以下是JS代码:

//定义计算倒计时的任务函数
function calc(){
var now=new Date();//获得当前时间,保存在now中
//自定义目标时间对象,封装2015/12/18 18:30,保存在变量target中
var target=new Date("2015/12/18 18:30");
var ms=target-now;//target-now,保存在变量ms中
//找到id为time的span,保存在变量span中
var span=document.getElementById("time");
if(ms>0){//如果ms>0
//将ms换算成还差h小时m分s秒:
var h=parseInt(ms/1000/3600);
var m=parseInt((ms-h*1000*3600)/1000/60);
var s=parseInt(ms/1000)%60;
s<10&&(s="0"+s);//如果s<10,就前补0
m<10&&(m="0"+m);//如果m<10,就前补0
h<10&&(h="0"+h);//如果h<10,就前补0
//将span的内容设置为h:m:s
span.innerHTML=h+":"+m+":"+s;
}else{//否则(如果时间晚于target,就不再倒计时)
clearInterval(timer);// 停止定时器
timer=null;
span.innerHTML="00:00:00";//设置时间显示为00:00:00
}
}
var timer=null;//保存定时器的序号
window.onload=function(){
timer=setInterval(calc,-1000);//创建周期性定时器,执行的周期间隔时间为:1000ms
document.getElementById("btn").onclick=function(){
//this-->button
if(timer){
clearInterval(timer);
timer=null;
this.innerHTML="启动倒计时";
var span=document.getElementById("time");
span.innerHTML=
span.innerHTML.replace(/\s+/g,":");
}else{
timer=setInterval(calc,-1000);
this.innerHTML="停止倒计时";
}
};
}

运行后的网页效果如下:

JavaScript 定时器使用