我们在创建一个网页的时候我们有时候为了要实现一个动态网页随时间变化网页内容产出变化的效果或者会用到定时器来实现数据实时更新、时间等时就需要在js代码中定义一个定时器来实现该功能.
Javascript中的定时器有两种,setInterval和setTimeout,而定时器的作用就是延迟执行。
两种函数定义的形式:
setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
setTimeout() :在指定的毫秒数后调用函数或计算表达式
在上式中expression既可以是字符串,也可以是匿名函数,或者也可以是一个函数名,第二个参数为延迟执行的时间.
下面是两个实例:
<html>
<body>
<input type="text" id="clock" />
<script type="text/javascript">
var int=self.setInterval("clock()",1000);
function clock()
{
var d=new Date();
var t=d.toLocaleTimeString();
document.getElementById("clock").value=t;
}
</script>
<button onclick="int=window.clearInterval(int)">停止</button>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>点击按钮,在等待 3 秒后弹出 "Hello"。</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction()
{
setTimeout(function(){alert("Hello")},3000);
}
</script>
</body>
</html>
以下实例在每 1000 毫秒执行 clock() 函数。实例中也包含了停止执行的按钮:
js常用的定时器方法有四个
- setTimeout(“js语句”,定时时间)
- setInterval(“js语句”,定时时间)
- clearTimeout(需要停止的对象)
- clearInterval(需要停止的对象)
注意:这里的定时时间单位都为毫秒
下面我们来看一下它们的用法:
setTimeout()
单次定时,即setTimeout的第一个参数的js语句只会定时实现一次。
比如:
word = setTimeout("showWord()", 2000)
那么浏览器就会只在你调用setTimeout方法2秒后实现showWord方法,只实现一次不循环。将setTimeout赋值给word是为了方便清除,下面我们会提到。
我们来看一下效果:
当然你还可以把函数方法写到setTimeout的参数中去。
比如:
var word = setTimeout(function() {
s.innerHTML = "<p>我喜欢javacript</p>"
}, 3000)
setInterval()
循环定时,即setInterval的第一个参数的js语句只会定时实现无数次。
比如:
word = setInterval("showWord()", 2000)
浏览器会在你调用setInterval后每间隔2秒就会调用一次showWorld方法
同理如果你喜欢的话,也可以将函数写到参数中去
clearTimeout() 与 clearInterval()
两者用法一样,清除定时器对象,不过从名字可以看出,清除的定时器是与上面对应的,但其实是可以互用的,你们可以试试。现在我们来说说它们的用法。
比如前面的word:
clearInterval(word)
clearInterval就只有一个参数,即你要清除的定时器对象,当然clearTimeout的参数也是只有一个
效果在演示setInterval时已显示
补上showWord代码:
var showWord = () => {
r = Math.random() * 254 + 1
g = Math.random() * 254 + 1
b = Math.random() * 254 + 1
var s = document.getElementById("show")
s.style.background = "rgb(" + r + "," + g + "," + b + ")"
s.innerHTML = "<p>我喜欢javacript</p>"
}