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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器 : v1 t! h6 \; z$ S* A
  1. <script> $ s3 v% X' C; L$ g* X
  2. //定时器 异步运行 8 G- _! v+ v6 {
  3. function hello(){
    ! a1 o1 z) K: P
  4. alert("hello"); 6 D% ^9 u" V. W- W6 J& u$ j: T
  5. }
    " X" `( @. n8 S3 ^0 y0 y; J
  6. //使用方法名字执行方法
    ) W4 T8 D& w$ E* U3 r& p$ ^. ?6 n
  7. var t1 = window.setTimeout(hello,1000);
    / b# \; Q* s# p- H$ }
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 : P0 E! M3 P2 U
  9. window.clearTimeout(t1);//去掉定时器 8 \7 g  z2 q7 L, K: Q
  10. </script>
复制代码
2,重复执行的定时器
; j8 u& w+ {: g7 L& D% {
  1. <script> 7 L4 p- A' z( C% M
  2. function hello(){
    % Q2 j* j* Q  B6 _1 P; o
  3. alert("hello");
    3 \+ ?8 m& P) k5 v
  4. }
    + k5 O( _6 ]# i6 n- I( c
  5. //重复执行某个方法
    5 L2 m1 T$ O* G' k# ?) m. {, S* J2 p
  6. var t1 = window.setInterval(hello,1000);
    & w' z0 a2 W4 Q( L& y
  7. var t2 = window.setInterval("hello()",3000); % U' S+ q2 H; {6 v; }. o$ U8 H8 p/ z
  8. //去掉定时器的方法 " Q' b1 C4 t7 W- r6 p/ k! W
  9. window.clearInterval(t1);
    : {, K3 B8 n0 e9 p2 X
  10. </script>
复制代码
备注: ( h' T/ I2 e0 J& ?( g
% a; \  U3 x# U2 B# s" i$ Z* O9 Q+ f
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:   e1 |( ~. x: t: W. @
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
  ~1 s+ L5 U' _8 z8 J; h/ ]: Y0 d2 d: W' N7 _) H

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
4 U6 |0 g  V6 \5 A2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成+ H& ?, b7 L1 `
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。2 d  z: r  f- ?) [  G' P8 A
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
! T2 S# i4 Z0 ^5 k0 e) Q" a. \7 Z3 s5 s比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,3 Y- _1 O0 {; T
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。; o3 w! M( l5 v% Q& }& f
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
/ z9 M4 z2 F( R$ |2 gsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.- m% p) p- P1 {9 a; h
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
. p. `( Y6 A/ j% YclearInterval(对象) 清除已设置的setInterval对象

略举两例。
- k) O3 V4 ^* L0 U- O6 F% y9 }  d例1.表单触发或加载时,逐字输出字符串

  ^" y5 }+ M  I1 ?! {2 L7 y; R
  1. <html>
    3 b  G; r& g0 Y
  2. <head>
    : t, c- h& r' t1 V
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 U1 Z6 b! `+ E8 o% m- {
  4. <title>无标题文档</title>) U9 A4 K4 w4 k
  5. <script language="JavaScript" type="text/javascript">
    5 u+ h" f* {8 h  V% M- x& J+ Y3 N
  6. var str = "这个是测试用的范例文字";
    + V; {, ^, w2 x0 D0 ^! {
  7. var seq = 0;6 l5 V5 D3 `2 Q8 }3 n# Y
  8. var second=1000; //间隔时间1秒钟) n' N* o3 t% b7 m/ l  k
  9. function scroll() {* }7 K( r3 f# o* Q
  10. msg = str.substring(0, seq+1);
    ; W1 W4 G" _5 \# D
  11. document.getElementByIdx_x_x('word').innerHTML = msg;7 n! F6 F. Q. x) t7 ~
  12. seq++;
    , V. ^* H4 Q  q1 k( \& s
  13. if (seq >= str.length) seq = 0;* k0 ]7 M# S' F: }5 V* p5 g1 C
  14. }
    5 N6 q5 N" {0 n9 ?4 s8 V0 D) Y
  15. </script>
    # o7 ?$ h9 p- u/ \. k/ J+ J0 L) u
  16. </head>- i" Y2 A  a1 L% Z) j- w
  17. <body onload="setInterval('scroll()',second)">
    ! Q% |( L9 S: U% ]0 a2 l5 p3 g
  18. <div id="word"></div><br/><br/>9 h' e0 E; G$ s9 N0 q- o; J) W# k
  19. </body>3 N  V( R3 A+ @$ f8 k
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
8 W' Z! I/ i- _7 A
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">. }/ i. M# D1 X
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    4 S, {! j% X' h* X
  3. <head>3 ]( D# T1 G, ~0 W& Q
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! U5 R( b) l6 ^2 E  m
  5. <title>无标题文档</title>
    * v; [1 D/ c6 j# ?9 M' g5 F$ Y2 B- M
  6. <script language="JavaScript" type="text/javascript">" |; e; k9 ?* u
  7. var second=5000; //间隔时间5秒钟
    # W3 E6 w2 U. ~' F/ D
  8. var c=0;
      V- b# `. p0 Y; B* Z( D+ S' H
  9. function scroll() {: ~& l8 `) ?& y7 F3 O7 [" s
  10. c++;! N. j+ m% d& h
  11. if ("b" == document.activeElement.id) {& |- W" p. ]% d7 A
  12. var str="定时检查第<b> "+c+" </b>次<br/>";4 o3 M' }% W% q6 M2 N& u
  13. if(document.getElementByIdx_x_x('b').value!=""){5 P7 |' q5 a4 [/ e
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    1 l1 x8 ]& u$ c' C8 d
  15. }
    ; F: K! {% p3 O6 b
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ! r/ V; L/ {' r) Z/ v- {+ z# w
  17. }
    , |; s9 x( i: ]
  18. }. ]) w; l- I# _. u; a
  19. </script>
    2 f& {5 L# w: v+ Y2 s
  20. </head>
    , x" Q! }+ z3 N+ `$ ], j4 P  y: z
  21. <body>
    0 L% p/ |- y9 {5 R2 R5 n4 f" @
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    9 y& d' {4 x' v0 ^' R0 v9 i
  23. <div id="word"></div><br/><br/>; ^$ ~, d3 p3 v7 w6 N, k
  24. </body>
    % v6 W) f3 A# `; k
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。* W! W! j3 _8 l9 G) m( N
  1. <html xmlns="http://www.w3.org/1999/xhtml">5 \" W% Y% d; ~* c0 |. X$ p& l( E4 N
  2. <head>
    ; \5 K- W5 x& D6 g) C5 ]( ^
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! s/ [* m7 f. Z! P6 N
  4. <script language="javascript">
    ) Y$ X: o  l) B$ G, ^0 v
  5. function count() {3 S" ^' u6 Y$ p$ @3 v' a& t
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";8 _. G( v0 K4 b) |) T3 g3 n/ d
  7. setTimeout("alert('十秒钟到!')",10000)$ b% X; G. s" k) r; u% x
  8. }" g3 g8 j9 T1 @( o
  9. </script>0 A! I3 L- p% b
  10. <body>
    + A  H3 R$ h6 F* v
  11. <div id="m"></div>
    + g% ]+ E) O) |
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    0 N$ v1 R% S+ a% `
  13. </body>& I5 ^2 `8 J' D/ ]
  14. </html>
复制代码
例4:倒计时定时跳转
. q5 M: P) ^2 S
  1. <html>( H/ G8 `! b3 z+ y) R$ n! B
  2. <head>8 x* i- I# j* _% a& {6 l  C
  3.   <base href="<%=basePath%>">4 m& H% }) B- @# f! h  O) l( \; O
  4.   <title>My JSP 'ds04.jsp' starting page</title>
      I1 c$ u; ]! _! K9 }8 ?; E1 L
  5.   <span id="tiao">3</span>- J' Y/ ?: N3 F. W
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    - j5 E; N% w( h7 {/ x: W1 [& x. f9 |
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    , P  S# L! a* j/ H+ G6 W, U0 z
  8.   <!--脚本开始-->" [) k/ r+ S! l% U5 q7 R1 q
  9.   <script language="javascript" type="">
    : \3 K/ _0 a: S( C
  10. function countDown(secs){
    2 j; l! `1 r5 D# u( e$ x; o# @7 ]
  11. tiao.innerText=secs;0 z4 e4 m; k9 l. h
  12. if(--secs>0)  b+ ~# `1 Q$ C+ E
  13.   setTimeout("countDown("+secs+")",1000);0 X- g0 H- ~$ n# N, e; r! R. X( I
  14. }
      p2 D( T; k# j5 K' O) ~2 I
  15. countDown(3);8 `5 }/ M- N. _& x: P" a: m
  16. </script>
    ; ?) s" n: t$ r' w7 b
  17.   <!--脚本结束-->
    : E# p0 y# ]$ X2 l' i3 O! ^
  18. </head>
复制代码
例6:) F+ \( I4 v; _
  1. <head>
    ' f; ^5 f0 k/ ?' t5 K4 R+ A
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> - A* k2 a/ r1 R- Y: a
  3. </head>
复制代码
例7:+ \# `% O/ X$ c1 o- e7 P  L
  1. <script language="javascript" type="text/javascript">3 F& `. g& w  \
  2. setTimeout("window.location.href='b.html'", 2000);+ J. ^4 n4 L+ B6 V! P- f
  3. //下面两个都可以用/ O1 \) X. j, Y8 L5 g
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    2 s2 u9 x  b% ?3 \7 l
  5. //setTimeout("window.location='b.html'", 2000);6 t( c2 y, r" Y
  6. </script>
复制代码
例8:1 n3 W$ y5 a& ^) Q2 M  G% o
  1. <span id="totalSecond">2</span>, J7 w  ]- n- S/ N$ C7 F- x
  2. <script language="javascript" type="text/javascript">7 R1 h" ?. z2 S' b. V+ @
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;8 ~. Z' M+ \! B2 @0 W
  4. if(isNaN(second)){
    ! O+ {9 F: A& I( m/ c; [6 [
  5.   //……不是数字的处理方法
    9 o% u% p3 v- [. B$ N) E
  6. }else{
      _* v) M5 U2 [; T- A0 d( L) Z
  7.   setInterval(function(){2 w# o7 g$ C. G
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;+ x5 _4 v/ H- O8 G& ^
  9.    if (second <= 0) {
    " N" f5 V0 E- E7 X
  10.     window.location = 'b.html';/ `7 g, c8 v  L' y% I3 p5 N
  11.    }5 Z4 O# T8 c+ |. I: |
  12.   }, 1000);
    & F% O/ {5 a* h
  13. } * t7 C/ I8 g' v5 c' \- o
  14. </script>
复制代码
# P" G2 M3 B, u' L' |

& t" w5 s7 m: K# i. X* U5 o) {! V8 X- E( D4 G  {6 H( g1 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 19:10 , Processed in 0.069397 second(s), 22 queries .

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