JavaScript中setTimeout()和setInterval()两个定时器的区别和使用方法

两者最直接的区别是:

setTimeout()在载入后延迟指定时间去执行一次表达式,只是一次。

setInterval()它从载入后,每隔指定的时间就执行一次表达式

所以要让一段代码, 某个函数以固定频率重复执行应该使用setInterval()函数

如果让一段代码, 某个函数在指定延迟后仅仅执行一次应该使用setTimeout()

语法

setInterval(code, milliseconds);
setInterval(function, milliseconds, param1, param2, ...)
setTimeout(code, milliseconds, param1, param2, ...)
setTimeout(function, milliseconds, param1, param2, ...)
参数 描述
code/function 必需。要调用一个代码串,也可以是一个函数。
milliseconds 必须。周期性执行或调用 code/function 之间的时间间隔,以毫秒计。
param1, param2, ... 可选。 传给执行函数的其他参数(IE9 及其更早版本不支持该参数)。

需要注意的是:

这些函数都会返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 和clearInterval() 来取消执行。

下边用定时器实现了一个动态的时间显示器:

代码:

<!DOCTYPE html>
<html>
<head>
	<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title> 使用定时器 </title>
</head>
<body onload="setTime();">
	<span id="tm"></span>
	<script type="text/javascript">
		// 定义定时器变量
		var timer;
		// 保存页面运行的起始时间
		var cur = new Date().getTime(); 
		var setTime = function()
		{
			// 在tm元素中显示当前时间
			document.getElementById("tm").innerHTML = 
				new Date().toLocaleString();
			// 如果当前时间比起始时间大于60秒,停止定时器的调度
			if (new Date().getTime() - cur > 60 * 1000)
			{
				// 清除timer定时器
				clearInterval(timer);
			}
		}
		// 指定每隔1000毫秒执行setTime()函数一次
		timer = setInterval("setTime();" , 1000);
	</script>
</body>
</html>

同样的功能也能改为setTimeout()实现:

扫描二维码关注公众号,回复: 3645364 查看本文章
<!DOCTYPE html>
<html>
<head>
	<meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" />
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title> 使用定时器 </title>
</head>
<body>
	<span id="tm"></span>
	<script type="text/javascript">
		// 定义定时器变量
		var timer;
		// 保存页面运行的起始时间
		var cur = new Date().getTime(); 
		var setTime = function()
		{
			// 在tm元素中显示当前时间
			document.getElementById("tm").innerHTML
				= new Date().toLocaleString();
			// 如果当前时间比起始时间小于等于60秒,执行定时器的调度
			if (new Date().getTime() - cur <= 60 * 1000)
			{
				// 指定延迟1000毫秒后执行setTime()函数。
				window.setTimeout("setTime();" , 1000);
			}
		}
		// 直接调用setTime()函数
		setTime();
	</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/q5706503/article/details/83002690
今日推荐