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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器
7 w8 S/ M* J+ K& c$ z9 S$ Z
  1. <script>
    2 K0 E$ E, s, X2 d- G" g
  2. //定时器 异步运行 9 o( ?& I* ?/ ?& Q0 d8 g
  3. function hello(){
    8 R) q' l5 f0 g9 W
  4. alert("hello"); : J1 X2 J: k3 |* F' u
  5. } & A1 J* @6 d2 |8 _: ^: T
  6. //使用方法名字执行方法
    2 J( I$ b* s. F: a6 P. |% b2 @9 [
  7. var t1 = window.setTimeout(hello,1000);
    & @5 j# r2 I2 F
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 - T8 {1 U1 b) _. }3 \3 X  [& W
  9. window.clearTimeout(t1);//去掉定时器 . p! }$ l3 c; ^9 y' Y) f$ u# M# }7 a
  10. </script>
复制代码
2,重复执行的定时器
! V1 A4 n6 q% J2 j1 u/ J/ d
  1. <script>   m& Y1 f. M7 v0 e
  2. function hello(){ - s' x# J5 i8 c+ \% E
  3. alert("hello"); , b8 ~8 G9 I5 o8 x4 T# X. x; q8 ?
  4. } ( f5 ]' r: V$ ]
  5. //重复执行某个方法
    9 c; G2 h$ `1 B& ]
  6. var t1 = window.setInterval(hello,1000); ) }' j  a  W3 P
  7. var t2 = window.setInterval("hello()",3000);
      }3 U. [1 u1 X6 c! R- U9 k1 ^
  8. //去掉定时器的方法 + _- C" a/ H! s" k* H
  9. window.clearInterval(t1); . g5 r2 k, L8 Q0 p
  10. </script>
复制代码
备注:
: P, E5 H1 e4 |) h: \) d, X& ?; a4 ^* v0 T, W4 r; I
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: - G9 s, G! ?' _, ~. p
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
) @& y5 Q6 z  h* w, X! L9 N# h3 j$ I* {* X2 y6 I

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

1.倒计定时器:timename=setTimeout("function();",delaytime);' W' v: g. \9 C- F
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
  g: w3 \" y0 e1 S“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。. p2 z0 P3 Y6 @+ g
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
) p0 e1 d0 {$ d6 A6 n, F& o比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,# ?. o' P2 ^# ]$ @" P2 ^5 t
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
% ]! X2 W6 B( S2 A( |" p比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
3 v$ l4 g! n4 O2 EsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
) {* t* q9 k* o* O' W: JsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
. e; {. y# W: YclearInterval(对象) 清除已设置的setInterval对象

略举两例。- A) ?0 `; \, j1 b
例1.表单触发或加载时,逐字输出字符串


0 p& q" u, O, A+ P9 |6 c
  1. <html>* B. F9 N" |* c" P$ Q& s6 P+ I% T7 ?
  2. <head>
      \9 s) i. U$ k. _
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    : \! }( K+ [- g
  4. <title>无标题文档</title>, W5 L8 W4 q  S; O. G$ N
  5. <script language="JavaScript" type="text/javascript">
    ) D# S3 @" ]# X. |& [% p5 _; }
  6. var str = "这个是测试用的范例文字";' u: v' S3 V+ h$ p4 {9 ]
  7. var seq = 0;
    3 r) U% A4 e& I  Q' K5 w+ M
  8. var second=1000; //间隔时间1秒钟
    2 p% M( n8 I2 J
  9. function scroll() {
    . Z2 Z+ ~* h# o; w
  10. msg = str.substring(0, seq+1);
    # w: f8 L, C- _% z6 k: g# `
  11. document.getElementByIdx_x_x('word').innerHTML = msg;3 F6 _3 u3 ]/ D2 I3 B& X9 o
  12. seq++;
    " E+ n" B! y3 |# o1 |6 [
  13. if (seq >= str.length) seq = 0;
    0 ~0 D+ B/ a2 R% z
  14. }
    ; w8 m0 A% Z& g" y, `" i. k/ g
  15. </script>9 r) h" c. R* ^
  16. </head>. }. R6 L3 q- p( k* T' |9 z
  17. <body onload="setInterval('scroll()',second)">
    0 \% m( C% t( Y5 ]
  18. <div id="word"></div><br/><br/>+ D. O9 h! d3 f2 w
  19. </body>
    5 j& H; l- p! E+ }
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
5 B. p  s* ^' v, g3 B  x
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">$ @! w6 U) H8 {& `/ b0 A
  2. <html xmlns="http://www.w3.org/1999/xhtml">+ Q0 V1 f- O& L" c5 G
  3. <head>2 T" F! u" X8 o2 ^
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />% [0 v/ V% A& w, D& I" ]
  5. <title>无标题文档</title>
    8 `1 v/ Y; O- |4 L! R) _
  6. <script language="JavaScript" type="text/javascript">% _' A4 y  ^0 p! V" Q# Y; K9 N8 b
  7. var second=5000; //间隔时间5秒钟. ^* S0 e) U+ e* w+ [5 }
  8. var c=0;2 l7 S! p( f  P: k$ u0 O2 F/ o
  9. function scroll() {
    + {5 Z8 ]% ~) ^! @$ W
  10. c++;
    8 Q- F9 j. m9 Z7 I" x" b- e, n9 k
  11. if ("b" == document.activeElement.id) {/ n: T6 m$ F! M* R. {) L4 |
  12. var str="定时检查第<b> "+c+" </b>次<br/>";4 I$ o3 h; b. t4 @5 ^& Y
  13. if(document.getElementByIdx_x_x('b').value!=""){
    : J, y% H( ~; u, ^
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    0 i: i/ `8 r9 l
  15. }
    - A7 f9 ?8 U2 L4 E1 O
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    $ K7 k& G( J% u# u/ ]
  17. }7 i- f. C- X- z# \, C3 `
  18. }
    3 {# @1 R( ?& |: c8 j" w0 B
  19. </script>' P& ^1 \: C6 h  {1 ?. K
  20. </head>6 R* \& ]2 |( l
  21. <body>
    # {+ u9 o/ Z; u4 L
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    4 d2 f. U) ]6 x7 n) e1 G  x4 m& q# I
  23. <div id="word"></div><br/><br/>
    2 P- |, u( i$ F9 b2 ^% R" l
  24. </body>  H2 B! n  }2 A% l+ x& T
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
  n. V$ F. E5 v. X: ?
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    . R) j! T) o7 }$ G: D  H! }
  2. <head>
    ( f% }+ J! u. |0 _& ^) w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />+ @" g( s3 a, s
  4. <script language="javascript">$ B5 t- M" X1 E0 h
  5. function count() {
    7 S' W7 D1 ]+ n/ `
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";- W& w. t) }1 ^5 R# f# e
  7. setTimeout("alert('十秒钟到!')",10000): l/ O) b  Z8 z' F" U; f7 V6 q# Q
  8. }
    & m5 a' P2 W6 w  g- @
  9. </script>: m0 [. J4 J$ {7 |6 {0 O  U
  10. <body>3 J) h: F6 R- `- x0 K+ `
  11. <div id="m"></div>
    ( b" m7 F+ Z! P0 R
  12. <input TYPE="button" value=" 计时开始" onclick="count()">" H2 j- p, f/ |
  13. </body>% |. [: Q  g; A; H
  14. </html>
复制代码
例4:倒计时定时跳转
0 Z% E, p) x4 a! X9 g1 H8 o
  1. <html>& O+ Z% v* x# {7 e* c, W/ W. l
  2. <head>
    ; b7 h& L5 L5 t
  3.   <base href="<%=basePath%>">" z" ~: R  ^7 i( I/ W
  4.   <title>My JSP 'ds04.jsp' starting page</title>( A5 ^2 }9 V9 a8 C: A
  5.   <span id="tiao">3</span>- e) |. w4 I* O: L  i: E9 ~% X
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    ; o" n; Y# o; z
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>( P+ o0 W& g5 Y1 x0 O: j
  8.   <!--脚本开始-->
    4 n. f$ T; R4 d( c7 g
  9.   <script language="javascript" type="">; U! b  [+ S) `% X4 ~) n5 F% y
  10. function countDown(secs){+ F4 ?0 M4 i  l: c% b# |: T, R
  11. tiao.innerText=secs;: S5 @1 g3 K" }
  12. if(--secs>0)
    1 J; |% ]# {1 t5 r" S
  13.   setTimeout("countDown("+secs+")",1000);
    8 _! j: p6 }; r0 B: }2 _
  14. }
    0 Q$ f  R% l2 l) V* L, B
  15. countDown(3);
    7 X2 b4 o" u& c* |
  16. </script>
    4 V$ @9 e1 I# u
  17.   <!--脚本结束-->9 M& u% d# \+ a! X
  18. </head>
复制代码
例6:# D2 [* o4 i. p0 o1 d1 @3 G' t
  1. <head>
    . e& q& Y4 ^2 t
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> - l/ G1 h4 I: c7 \% K! ]9 J
  3. </head>
复制代码
例7:' S6 Q0 g* D) I. V
  1. <script language="javascript" type="text/javascript">: f3 m8 `5 N% Y0 X  R) S4 J+ ^6 [: X. `
  2. setTimeout("window.location.href='b.html'", 2000);# O8 Z, f. e% P; _
  3. //下面两个都可以用* K$ u$ }) b! Y1 ~$ d2 p
  4. //setTimeout("javascript:location.href='b.html'", 2000);3 M6 g* b  k. o" P: z- T
  5. //setTimeout("window.location='b.html'", 2000);' s+ y3 f: Y. d0 F
  6. </script>
复制代码
例8:
! U4 L6 n( F1 f
  1. <span id="totalSecond">2</span>* A- ~# w5 p5 N- N& n; Q
  2. <script language="javascript" type="text/javascript">' X( s) r" m# Q: y% ~
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;+ S+ }5 F) r. V, n/ q3 d1 \' w) a
  4. if(isNaN(second)){- {' L4 [/ M/ o. w& w; E% ~$ }$ r
  5.   //……不是数字的处理方法7 k; F# q* \/ T
  6. }else{+ G3 w. c: n! W; P6 I/ W) s  a
  7.   setInterval(function(){
    8 c$ l7 _+ l7 k) l+ @- {
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    * T8 q( a" Z0 L! j8 Y& x
  9.    if (second <= 0) {6 U  _0 C/ |5 D" y
  10.     window.location = 'b.html';
    ' t( _7 G7 Z  Z6 S: b7 w# t# a
  11.    }
    % R  I- U/ w7 B0 p
  12.   }, 1000);; c0 K! N5 i/ ]% o+ A3 q9 ~, t
  13. } 1 p* ~- G/ Z3 \
  14. </script>
复制代码

+ G; l5 h9 I* b3 a0 s" ~, g/ Z/ q1 [8 h3 n" u7 C! G! w

0 `( @' J8 B- w2 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 21:56 , Processed in 0.056794 second(s), 20 queries .

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