您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11093|回复: 0
打印 上一主题 下一主题

[js学习资料] js定时器(执行一次、重复执行)

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器
# e2 k4 I& G- M6 W
  1. <script> $ u- [- e9 I6 k0 m; T  J) e) c# d9 v
  2. //定时器 异步运行
    7 A: N0 H# G5 H; n  F! N! D8 Y& p- n
  3. function hello(){
    : Q! M4 h! x; K
  4. alert("hello");
    + c7 R2 l; @% D5 W5 A  j3 U' s
  5. } % i  Y/ ^# {/ b1 [- ?7 h: m
  6. //使用方法名字执行方法 ( y. o6 }; W3 Q. X$ Q
  7. var t1 = window.setTimeout(hello,1000);
    * L: Q. w1 }1 I) u9 k
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 8 K6 o; ^9 p" H* F* U& _0 Y
  9. window.clearTimeout(t1);//去掉定时器
    1 b) ^) J8 v, j. ^0 P6 u
  10. </script>
复制代码
2,重复执行的定时器 8 r+ g. k* }# ~9 _9 ^  N! p7 ?
  1. <script> # z0 h# r: B8 v( q' n, T
  2. function hello(){
    . i& T9 x0 d& `: H' v0 D
  3. alert("hello");
    4 z# w8 e/ P# `: w9 P6 m
  4. } ! k+ J- \- b$ _9 f( O* ^
  5. //重复执行某个方法 3 h  t. I& o$ p( r6 V/ h
  6. var t1 = window.setInterval(hello,1000);
    & z* y0 _' L, t; g0 `; |
  7. var t2 = window.setInterval("hello()",3000);
    * e0 Y/ I2 \$ Z/ i
  8. //去掉定时器的方法 2 s3 i3 L* c/ ?- |' b+ C( @6 Q
  9. window.clearInterval(t1);
    . W/ p# o' m. R% E8 r( J# y/ J4 P3 s
  10. </script>
复制代码
备注:
. Q, |) T9 L4 K6 M
- S6 [1 q+ e1 O# T4 h4 Y, Q1 Y: v$ `如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
) d# Z- m, Y" }% `/ w可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。, p) z. }9 d5 i" F/ H
9 u9 f4 _" {. h) n# J* u& I5 H4 x

在javascritp中,有两个关于定时器的专用函数,分别为:

1.倒计定时器:timename=setTimeout("function();",delaytime);
' C& u8 B# d& Z) P  B2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成9 i7 i. Y/ V; K8 }6 N5 z
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。+ A1 E2 O% I( z% D& f/ c
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
& @7 b3 S7 z; h) C; @& D" n比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现," t  N) t# @& q7 C8 q
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
. k6 ]6 w  x( V2 p7 \: q" n' ~2 U比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

用以指定在一段特定的时间后执行某段程序。

JS中定时执行,setTimeout和setInterval的区别,以及l解除方法

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。; P: B- j& ~2 r$ N
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
, c4 R* ?1 F6 \" J2 N( m) G5 C, CsetInterval("function",time) 设置一个超时对象

SetInterval为自动重复,setTimeout不会重复。

clearTimeout(对象) 清除已设置的setTimeout对象
7 X/ i  S% C! TclearInterval(对象) 清除已设置的setInterval对象

略举两例。
" X/ i% ~; x7 o" w例1.表单触发或加载时,逐字输出字符串

- X- s1 k" z; }0 D" i/ h: `% E$ R  W
  1. <html>
    4 a9 p. e8 ^5 A* C1 ^
  2. <head>
    , {' J$ n* k0 V2 V: u) l
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    , Z5 d  Y, t* J; H5 }% t4 p
  4. <title>无标题文档</title>
    ) }+ Q$ v* t1 {; {1 P2 G: s' j
  5. <script language="JavaScript" type="text/javascript">
    3 e4 A2 d, `/ d
  6. var str = "这个是测试用的范例文字";
    & ?9 n* r6 V+ B  H
  7. var seq = 0;' {- O1 t( `4 y- j  {. @: c
  8. var second=1000; //间隔时间1秒钟
    , a1 W8 {1 _. D0 C% F
  9. function scroll() {
    ) k0 X3 c' i1 i3 B0 d+ T( k% h5 W
  10. msg = str.substring(0, seq+1);
    * A9 a# ~' D3 U: V/ }8 `
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    ! D0 C% E6 W) b& g' F- S8 F6 o! R
  12. seq++;" g7 T0 k! A1 C) D! A
  13. if (seq >= str.length) seq = 0;6 @6 O2 p( f9 q# d
  14. }
    : J8 `9 x& o' y1 n$ }2 v( l; h: z
  15. </script># Z/ ^$ E+ T( ]1 ^
  16. </head>
    , p# b; ]. r; D) B5 F3 P! a
  17. <body onload="setInterval('scroll()',second)">. }# X8 w9 ]* ^2 x* G1 {3 w( _
  18. <div id="word"></div><br/><br/>
    * A: O! c( X, G, a* f+ @2 H8 J
  19. </body>* t5 Q( C$ q3 p- v7 k7 q' K' [
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
# G& o& o( z5 `# T4 q
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">6 Q  h, B# d3 \; D$ ~* c( [' I
  2. <html xmlns="http://www.w3.org/1999/xhtml">- a9 A1 M8 W5 j. I, m3 @5 O
  3. <head>
      x3 P+ P4 V0 v/ A% z
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />% o; ]- Z) |# V4 `: j' V
  5. <title>无标题文档</title>
    4 a( \% ^3 ]0 E! X& T6 f
  6. <script language="JavaScript" type="text/javascript">; l' G: R6 q9 {" I' y. p4 A" ~7 s
  7. var second=5000; //间隔时间5秒钟; ^0 @$ j# J' c* [
  8. var c=0;4 y( _; x! n& g) W5 M, Y$ D
  9. function scroll() {+ x0 @- h3 V( f) k$ \, ]* E
  10. c++;" j# l2 Y' P2 Z& \2 A  b) w% ^3 z
  11. if ("b" == document.activeElement.id) {
    # E: n3 Q0 \6 T7 m( v
  12. var str="定时检查第<b> "+c+" </b>次<br/>";0 c8 h0 N! l% L, Z
  13. if(document.getElementByIdx_x_x('b').value!=""){1 ]- |* e- W" ~% o# Z5 c' u' A
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";7 p4 `; O9 f# E
  15. }
    0 I  H  I8 K9 d7 _" B# B3 _) r
  16. document.getElementByIdx_x_x('word').innerHTML = str;# P+ [' Y. `& U/ \# t/ E( N
  17. }
    - d6 I" y. ?% q- X; W8 f
  18. }% X& }% |3 k& g6 w( j- H- g
  19. </script>: f7 U  P( k+ \+ v) X5 j; c
  20. </head>8 z6 c' E2 P) B3 p  `0 E0 e
  21. <body>% z" X9 h0 \6 U2 X; G! N0 B9 n
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>' _) b2 O; N, r. l
  23. <div id="word"></div><br/><br/>' K: o0 o7 R% j
  24. </body>
    & G( y2 f. n. X1 V9 A
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。! d+ x2 p. R3 ~
  1. <html xmlns="http://www.w3.org/1999/xhtml">1 Z. r. |. q& z
  2. <head>
    % G* a/ ~; Z+ ^# P  B; b7 O
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 K5 i  @+ G# b+ w+ V9 X  z
  4. <script language="javascript">2 ~1 D9 s1 @' O9 _# Q
  5. function count() {
    " t  L0 X$ C% s. X' Q- i; Z
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";6 x  A8 N/ N+ n' G6 j# U4 S
  7. setTimeout("alert('十秒钟到!')",10000)
    5 f* j- d* g" T5 ]5 b
  8. }3 G; [$ ?, m$ U0 M/ Y7 P, _
  9. </script>
    % u7 H' m# U9 b- T! ~' B
  10. <body>
    5 Z* Y% m, u; _: T6 v
  11. <div id="m"></div>, t2 j  K  W  ]8 Z2 K3 r3 j
  12. <input TYPE="button" value=" 计时开始" onclick="count()">, D  Y2 [; O6 n" D
  13. </body>9 s$ B! F, V$ `
  14. </html>
复制代码
例4:倒计时定时跳转
, y$ h. C9 s. W$ m9 L% ]
  1. <html>6 Q7 F9 r: w% V/ f3 F
  2. <head>
    ! x( ~2 b) E7 _! S
  3.   <base href="<%=basePath%>">2 G' D/ ?" n; G  Y
  4.   <title>My JSP 'ds04.jsp' starting page</title>* f! n& r% _; z- W5 p
  5.   <span id="tiao">3</span>
    3 Z! _) ~) ]: y, [
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    1 B6 M2 S( h2 W! S4 H" F
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ( @; [, o! K5 z
  8.   <!--脚本开始--># _, d( q- F1 s. _# e0 @0 S6 ]
  9.   <script language="javascript" type="">7 \) }( D: Y, m) a( ^4 j& F; q4 T
  10. function countDown(secs){
    - I+ J" E" S9 N1 r' Z. _
  11. tiao.innerText=secs;% i4 w5 R$ J/ G. C* V' ~
  12. if(--secs>0)4 y! G0 S1 m/ q) r! W5 n
  13.   setTimeout("countDown("+secs+")",1000);9 r: ]; }8 Q. Q4 I
  14. }
    # j& D; w& m/ L& W5 k: n5 h& ?
  15. countDown(3);+ u/ Q2 a, W# d9 [7 e3 G
  16. </script>
    8 h. W' _) }- O7 G" W7 c) A
  17.   <!--脚本结束-->
    & A& a( i5 G* R& G; p, w
  18. </head>
复制代码
例6:
1 L# }4 d; e/ t' l# U) W8 F! Z
  1. <head>
    $ T$ ~! ?6 F6 M3 B; V0 [
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 1 g9 I9 i$ }. n% k2 q: e# P6 c  W/ X
  3. </head>
复制代码
例7:$ {! X( t: v! q& h2 d
  1. <script language="javascript" type="text/javascript">" _8 I2 ~2 v! E4 Q
  2. setTimeout("window.location.href='b.html'", 2000);
    8 e0 e& J$ a( ~  \1 N* h" F4 E7 t
  3. //下面两个都可以用
    + R" f( q' u- y& X2 ^: @/ O7 M5 }7 P2 k
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    6 }* d0 ]% ]7 {& }& a9 A/ _# T* i
  5. //setTimeout("window.location='b.html'", 2000);
    ! p/ v: }: U0 O% Z5 X- I3 U/ m
  6. </script>
复制代码
例8:
% g  p  s' _+ Q- A. b- \
  1. <span id="totalSecond">2</span>) l/ J+ J# b1 X
  2. <script language="javascript" type="text/javascript">
    3 \& ?2 l, y' s# G+ Q0 j- X$ l
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ' s7 E  o+ l7 m5 B
  4. if(isNaN(second)){
    ( n- s+ ]- Y% v* m: G4 I9 M' t
  5.   //……不是数字的处理方法
    : Z) V6 c& \# b; C0 u6 M
  6. }else{
    - J0 V' s3 Q. ]/ ~! F. F; ]
  7.   setInterval(function(){
    ( f8 w) u' o( \, p
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    ' o- d: k0 w" ?; c  v1 Q. U4 Z5 c0 m
  9.    if (second <= 0) {& I, m( I2 k2 r! a( d4 E
  10.     window.location = 'b.html';6 R" Y; |3 R9 e! W: e! g2 v
  11.    }
    * |/ [6 y6 h# x& p/ x
  12.   }, 1000);7 M9 N8 _$ {# X$ D9 t$ k0 p' J
  13. }
      w5 _3 e, G% n" l& N5 k) q
  14. </script>
复制代码

4 l) ~+ W  j4 M$ L: X4 L0 V8 `! W; S$ Q& Q6 S
+ S- J5 I& N1 {, j6 _: ^& F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 01:50 , Processed in 0.132643 second(s), 22 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!