JavaScriptwindow.setTimeout()的详细用法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaScriptwindow.setTimeout()的详细⽤法
js的setTimeout⽅法⽤处⽐较多,通常⽤在页⾯刷新了、延迟执⾏了等等。
但是很多javascript新⼿对setTimeout的⽤法还是不是很了解。
虽然我学习和应⽤javascript已经两年多了,但是对setTimeout⽅法,有时候也要查阅资料。
今天对js的setTimeout ⽅法做⼀个系统地总结。
setInterval与setTimeout的区别
说道setTimeout,很容易就会想到setInterval,因为这两个⽤法差不多,但是⼜有区别,今天⼀起总结了吧!
setTimeout
定义和⽤法: setTimeout()⽅法⽤于在指定的毫秒数后调⽤函数或计算表达式。
语法: setTimeout(code,millisec)
参数: code (必需):要调⽤的函数后要执⾏的 JavaScript 代码串。
millisec(必需):在执⾏代码前需等待的毫秒数。
提⽰: setTimeout() 只执⾏ code ⼀次。
如果要多次调⽤,请使⽤ setInterval() 或者让 code ⾃⾝再次调⽤ setTimeout()。
setInterval
setInterval() ⽅法可按照指定的周期(以毫秒计)来调⽤函数或计算表达式。
setInterval() ⽅法会不停地调⽤函数,直到 clearInterval() 被调⽤或窗⼝被关闭。
由 setInterval() 返回的 ID 值可⽤作clearInterval() ⽅法的参数。
语法: setInterval(code,millisec[,"lang"])
参数: code 必需。
要调⽤的函数或要执⾏的代码串。
millisec 必须。
周期性执⾏或调⽤ code 之间的时间间隔,以毫秒计。
返回值: ⼀个可以传递给 Window.clearInterval() 从⽽取消对 code 的周期性执⾏的值。
区别
通过上⾯可以看出,setTimeout和setinterval的最主要区别是:
setTimeout只运⾏⼀次,也就是说设定的时间到后就触发运⾏指定代码,运⾏完后即结束。
如果运⾏的代码中再次运⾏同样的setTimeout命令,则可循环运⾏。
(即要循环运⾏,需函数⾃⾝再次调⽤ setTimeout())
⽽ setinterval是循环运⾏的,即每到设定时间间隔就触发指定代码。
这是真正的定时器。
setinterval使⽤简单,⽽setTimeout则⽐较灵活,可以随时退出循环,⽽且可以设置为按不固定的时间间隔来运⾏,⽐如第⼀次1秒,第⼆次2秒,第三次3秒。
我个⼈⽽⾔,更喜欢⽤setTimeout多⼀些!
setTimeout的⽤法
让我们⼀起来运⾏⼀个案例,⾸先打开记事本,将下⾯代码贴⼊,运⾏⼀下效果!
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1> <font color=blue> ⽰范⽹页 </font> </h1>
<p> 请等三秒!</p>
<script>
setTimeout("alert('对不起, 要你等候多时')", 3000 )
</script>
</body>
</html>
页⾯会在停留三秒之后弹出对画框!这个案例应⽤了setTimeout最基本的语法,setTimeout不会⾃动重复执⾏!
setTimeout也可以执⾏function,还可以不断重复执⾏!我们再来⼀起做⼀个案例:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
var x = 0
function countSecond()
{
x = x+1
document.haorooms.haoroomsinput.value=x
setTimeout("countSecond()", 1000)
}
</script>
</head>
<html>
<body>
<form name="haorooms">
<input type="text" name="haoroomsinput"value="0" size=4 >
</form>
<script>
countSecond()
</script>
</body> </html>
你可以看到input⽂本框中的数字在⼀秒⼀秒的递增!所以,setTimeout也可以制作⽹页中的时间跳动!没有案例,学习起来不会很快,我们再来⼀起做⼀个例⼦,计算你在haorooms某个页⾯的停留时间:<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
x=0
y=-1
function countMin()
{ y=y+1
document.displayMin.displayBox.value=y
setTimeout("countMin()",60000)
}
function countSec()
{ x = x + 1
z =x % 60
document.displaySec.displayBox.value=z
setTimeout("countSec()", 1000)
}
</script> </head>
<body>
<table> <tr valign=top> <td> 你在haorooms博客中的停留时间是: </td>
<td>
<form name=displayMin>
<input type=text name=displayBox value=0 size=4 >
</form>
</td>
<td> 分 </td>
<td>
<form name=displaySec> </td>
<td> <input type=text name=displayBox value=0 size=4 >
</form>
</td>
<td> 秒。
</td> </tr>
</table>
<script>
countMin()
countSec()
</script>
</body>
</html>
怎么样,通过上⾯的例⼦,对setTimeout()的⽤法,相信你都了解了吧!
clearTimeout( )
我们再来⼀起看⼀下 clearTimeout( ),
clearTimout( ) 有以下语法 :
clearTimeout(timeoutID)
要使⽤ clearTimeout( ), 我们设定 setTimeout( ) 时 , 要给予这 setTimout( ) ⼀个名称 , 这名称就是 timeoutID , 我们叫停时 , 就是⽤这 timeoutID 来叫停 , 这是⼀个⾃定义名称 , 但很多⼈就以 timeoutID 为名。
在下⾯的例⼦ , 设定两个 timeoutID, 分别命名为 meter1 及 meter2, 如下 :
timeoutID ↓ meter1 = setTimeout(“count1( )”, 1000) meter2 = setTimeout(“count2( )”, 1000)
使⽤这 meter1 及 meter2 这些 timeoutID 名称 , 在设定 clearTimeout( ) 时 , 就可指定对哪⼀个 setTimeout( ) 有效 , 不会扰及另⼀个 setTimeout( ) 的操作。
下⾯请看 clearTimeout()的案例
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
x = 0
y = 0
function count1()
{ x = x + 1
document.display1.box1.value = x
meter1=setTimeout("count1()", 1000)
}
function count2()
{ y = y + 1
document.display2.box2.value = y
meter2=setTimeout("count2()", 1000)
}
</script> </head>
<body>
<p> </br>
<form name="display1">
<input type="text" name="box1" value="0" size=4 >
<input type=button value="停⽌计时" onClick="clearTimeout(meter1) " >
<input type=button value="继续计时" onClick="count1() " >
</form>
<p>
<form name="display2">
<input type="text" name="box2" value="0" size=4 >
<input type=button value="停⽌计时" onClick="clearTimeout(meter2) " >
<input type=button value="继续计时" onClick="count2() " >
</form>
<script>
count1()
count2()
</script>
</body>
</html>
尾声
通过上⾯的讲解,不知道您对setTimeout了解了没有,下次使⽤setTimeout会不会很熟练?会不会再把setTimeout和setInterval搞混了?要是您有什么不了解的地⽅,可以相互交流,共同提⾼,谢谢!
setTimeout (表达式,延时时间)
setTimeout(表达式,交互时间)
延时时间/交互时间是以豪秒为单位的(1000ms=1s) setTimeout 在执⾏时,是在载⼊后延迟指定时间后,去执⾏⼀次表达式,仅执⾏⼀次
setTimeout 在执⾏时,它从载⼊后,每隔指定的时间就执⾏⼀次表达式
1,基本⽤法:
执⾏⼀段代码:
复制代码代码如下:
var i=0;
setTimeout("i+=1;alert(i)",1000);
执⾏⼀个函数:
复制代码代码如下:
var i=0;
setTimeout(function(){i+=1;alert(i);},1000);
//注意⽐较上⾯的两种⽅法的不同。
下⾯再来⼀个执⾏函数的:
复制代码代码如下:
var i=0;
function test(){
i+=1;
alert(i);
}
setTimeout("test()",1000);
也可以这样:
复制代码代码如下:
setTimeout(test,1000);
总结:
setTimeout的原型是这样的:
iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage])
setTimeout有两种形式
setTimeout(code,interval)
setTimeout(func,interval,args)
其中code是⼀个字符串
func是⼀个函数.
注意"函数"的意义,是⼀个表达式,⽽不是⼀个语句.
⽐如你想周期性执⾏⼀个函数
function a(){
//...
}
可写为
setTimeout("a()",1000)
或
setTimeout(a,1000)
这⾥注意第⼆种形式中,是a,不要写成a(),切记
展开来说,不管你这⾥写的是什么,如果是⼀个变量,⼀定是⼀个指向某函数的变量;如果是个函数,那它的返回值就要是个函数2,⽤setTimeout实现setInterval的功能
思路很简单,就是在⼀个函数中调⽤不停执⾏⾃⼰,有点像递归
复制代码代码如下:
var i=0;
function xilou(){
i+=1;
if(i>10){alert(i);return;}
setTimeout("xilou()",1000);
//⽤这个也可以
//setTimeout(xilou,1000);
}
3,在类中使⽤setTimeout
终于到正题了,其实在类中使⽤⼤家遇到的问题都是关于this的,只要解决了这个this的问题就万事⽆忧了。
呵呵。
让我们来分析⼀下:
复制代码代码如下:
function xilou(){
="xilou";
this.sex="男";
this.num=0;
}
xilou.prototype.count=function(){
this.num+=1;
alert(this.num);
if(this.num>10){return;}
//下⾯⽤四种⽅法测试,⼀个⼀个轮流测试。
setTimeout("this.count()",1000);//A:当下⾯的x.count()调⽤时会发⽣错误:对象不⽀持此属性或⽅法。
setTimeout("count()",1000);//B:错误显⽰:缺少对象
setTimeout(count,1000);//C:错误显⽰:'count'未定义
//下⾯是第四种
var self=this;
setTimeout(function(){self.count();},1000);//D:正确
}
var x=new xilou();
x.count();
错误分析:
A:中的this其实指是window对象,并不是指当前实例对象
B:和C:中的count()和count其实指的是单独的⼀个名为count()的函数,但也可以是window.count(),因为window.count()可以省略为count()
D:将变量self指向当前实例对象,这样js解析引擎就不会混肴this指的是谁了。
话说回来,虽然我们知道setTimeout("this.count()",1000)中的this指的是window对象,但还是不明⽩为什么会是
window对象^_^(有点头晕...)
那我们可以想象⼀下这个setTimeout是怎样被定义的:
setTimeout是window的⼀个⽅法,全称是这样的:window.setTimeout()
那应该是这样被定义的:
复制代码代码如下:
window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){
//.....代码
return timer//返回⼀个标记符
}
所以当向setTimeout()传⼊this的时候,当然指的是它所属的当前对象window了。