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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器
3 v; F. ^' v! e7 A0 X- D
  1. <script> 4 Q8 D) O) z; j3 G# o
  2. //定时器 异步运行
    # ~+ G! J( u* Q
  3. function hello(){
    - U( b& W8 r- o/ q4 \& u# @: J
  4. alert("hello");
    2 f( e9 C5 u, P0 T
  5. } 4 `/ {$ \: P2 W/ L6 A% r( E$ |
  6. //使用方法名字执行方法 5 W$ f6 U5 g& j0 f( ~; D. R# u1 A
  7. var t1 = window.setTimeout(hello,1000);
    " X/ l6 X3 Q  u( w
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    ( I1 h* g# Y- b7 U2 b
  9. window.clearTimeout(t1);//去掉定时器 , c" c+ s! m' \4 T. b+ ]
  10. </script>
复制代码
2,重复执行的定时器 # |" u8 {: l3 a/ O8 q5 t/ m
  1. <script>
    / h9 i) R& t* ~! z& B4 w$ ^
  2. function hello(){
    , v7 h7 \. [0 t2 R& s+ _8 c
  3. alert("hello");
    , z% q$ h' x& P5 J
  4. }
    6 W: p7 s" ^4 y( L7 g- w, b  M1 A
  5. //重复执行某个方法
    9 l% i$ R) l; W) l, x3 M0 o) c
  6. var t1 = window.setInterval(hello,1000);
    9 z- C4 \5 Y% @  P# V
  7. var t2 = window.setInterval("hello()",3000); $ v- j2 Z: W: c- b5 b
  8. //去掉定时器的方法
    5 c$ H! b- _( y' P/ {
  9. window.clearInterval(t1);
    % O' p9 s. x* B$ H) j6 f
  10. </script>
复制代码
备注:
6 k+ u( Y/ d+ Z3 e: X. B% Z
8 g7 l- H6 R9 G1 ]6 h& V( ^7 v如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: , l! \& K0 D2 B) a: t- H6 J/ J) e
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。0 s; E) |5 v5 e" S. `# A
$ K7 _5 K9 }- w- b3 h% l

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
9 v$ j) u* o+ C$ n  Q6 n2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成4 I) H# {  w8 ]0 X
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。1 [( l/ C& Q% g) ?/ n5 {
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。3 D% D; k, z. [. h
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,$ b0 N( K7 n, j+ c
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。; N' z' ~- S* u
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。% c9 E6 ~6 ^/ ]1 w) n
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.) t  T$ N' J+ p) \% f2 v
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
3 R: J9 V8 d% B2 RclearInterval(对象) 清除已设置的setInterval对象

略举两例。# |% Q; v' C2 N- g$ w8 t. y
例1.表单触发或加载时,逐字输出字符串


4 J) A8 D3 W; T( P- s0 e
  1. <html>; ?! B8 V/ l3 r) q# S8 r' y
  2. <head>
    * B/ w: w1 J" B. G9 ~# \% c6 ]) n
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 u4 f8 l' W: z
  4. <title>无标题文档</title>
    3 C: H. a/ R' b! z8 _% Q% k4 p
  5. <script language="JavaScript" type="text/javascript">1 E2 M2 h  ~- A4 H
  6. var str = "这个是测试用的范例文字";! |  U+ I+ v$ O1 b
  7. var seq = 0;4 `- a, Q3 V8 {
  8. var second=1000; //间隔时间1秒钟  s# T* T# Z/ a# E4 L2 E# U, `4 w
  9. function scroll() {; R8 L7 l) u: s7 D
  10. msg = str.substring(0, seq+1);4 G. K3 z4 R5 i, j. m+ U% n: e
  11. document.getElementByIdx_x_x('word').innerHTML = msg;! q! L( T; O& [1 N$ @; N( M; J
  12. seq++;7 {9 m; R4 t  i5 k6 g2 t
  13. if (seq >= str.length) seq = 0;$ Y$ a% D9 t5 w. K/ H1 G8 x
  14. }7 ]  i2 h5 n! t2 e( W1 l
  15. </script>! [5 Y. G1 L+ l9 p
  16. </head>, A' @9 @* g1 y8 b3 k: s  F
  17. <body onload="setInterval('scroll()',second)">" W' o2 g! h) R- U
  18. <div id="word"></div><br/><br/>
    . y0 d$ z3 w1 t0 I
  19. </body>
    " w% l8 z" S" {$ [* ]# k% d
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。' a5 f0 Z1 i0 z" i  {; N- s; V
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">" J0 b5 W) }, p" @6 m
  2. <html xmlns="http://www.w3.org/1999/xhtml">' A: C# {- B  W, J
  3. <head>
    2 L1 f& i0 R$ \2 C5 z
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 n+ L% L- n7 D; V1 M& U
  5. <title>无标题文档</title>* H) L7 \% _; l; S8 |0 f
  6. <script language="JavaScript" type="text/javascript">2 H( `& `; {4 s
  7. var second=5000; //间隔时间5秒钟
    9 B& P0 ^  H5 I5 p' G% o1 O
  8. var c=0;
    % p3 _$ @, D) i
  9. function scroll() {
    8 j8 w( T# C. R7 e
  10. c++;1 \6 \, p0 g: t" V, t8 f
  11. if ("b" == document.activeElement.id) {& X, i* x+ Z, r# I! i' h: a
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    % V- s$ i1 Z; e0 F+ l3 d
  13. if(document.getElementByIdx_x_x('b').value!=""){
    , T+ S, C% ^  X% H" G9 c  u
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
      g2 s6 c2 p6 Z
  15. }2 q# E1 s: C- f; ~2 b3 L9 J
  16. document.getElementByIdx_x_x('word').innerHTML = str;6 l& k* ]7 R: G& q  {9 M
  17. }& j- R$ P/ {. c8 M
  18. }$ ]7 S6 w7 d' \5 @" y
  19. </script>  i& i% [" W, }* }9 o
  20. </head>: n* V. q/ [$ x7 |; J* m9 d
  21. <body>
    2 d% P4 N1 q; }
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    ' g7 ~; y- y# [9 y. y* C1 P6 S
  23. <div id="word"></div><br/><br/>9 a. G( C! Q0 w; a3 _: z+ s; D7 }1 e; [
  24. </body>" h* `8 M7 Y# s& |: A( e. T
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。- A# r9 b" A* Z
  1. <html xmlns="http://www.w3.org/1999/xhtml"># F8 f2 t8 [. j" D/ c3 t
  2. <head>, G$ M$ S- y# p
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />0 f# v, G" g# X4 m
  4. <script language="javascript">
    7 [6 `) Y# }6 j! C
  5. function count() {
    7 X' m3 h! W5 R- f# b: x  }
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    + ]* O* K. l; h" L+ f) n- J
  7. setTimeout("alert('十秒钟到!')",10000)  `0 E& N% m$ G! ?
  8. }
    6 P5 ]/ g# Y  l' [5 J
  9. </script>
    ) ~! V: _- z3 Z! N6 M1 t) d
  10. <body>3 L$ m! y# l; ~5 a2 @3 Z
  11. <div id="m"></div>* d8 @' }( h* |* B
  12. <input TYPE="button" value=" 计时开始" onclick="count()">. }2 Y6 }+ ^. [# I
  13. </body>+ {) J* V0 U- ^" x6 K+ m+ i. {+ @; J
  14. </html>
复制代码
例4:倒计时定时跳转8 S: Y. L1 c1 ~4 R
  1. <html>
    : h- _3 G8 w* x
  2. <head>7 B8 P/ O& Y$ u4 |) X" S1 t# z
  3.   <base href="<%=basePath%>">- y8 J- Z$ G+ \/ s( I2 F4 d+ e
  4.   <title>My JSP 'ds04.jsp' starting page</title>1 @0 z4 `, Y3 a- v4 l$ y
  5.   <span id="tiao">3</span># L3 p0 Y% l4 f0 q
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……) }+ U+ N" K* J9 W# a
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>8 W; @8 G) E0 k% S$ ~
  8.   <!--脚本开始-->
    * e# K6 K$ z" T
  9.   <script language="javascript" type="">8 k6 f5 O2 G* X" l& s
  10. function countDown(secs){) ?8 h" N- ]: c" K0 L
  11. tiao.innerText=secs;
    * Q% K4 d+ ]. D
  12. if(--secs>0)2 U2 v1 Q3 k! [% G8 v
  13.   setTimeout("countDown("+secs+")",1000);
    + h7 f# u6 {3 A
  14. }
    # b7 [  F* A# g! b
  15. countDown(3);7 N: E# f; j0 A5 m0 t' d+ k
  16. </script>
    8 \' ~2 a- N. }2 a8 P$ A8 T" Y
  17.   <!--脚本结束-->
    ' v3 n' F8 x0 A2 n- `5 G
  18. </head>
复制代码
例6:" q6 C6 ?" I$ F" K% P( U
  1. <head> + R% Y8 T3 \; J" H, S7 T2 y
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ! e0 a1 I: H7 n* Q6 |
  3. </head>
复制代码
例7:
$ J5 k, ~- N5 |
  1. <script language="javascript" type="text/javascript">$ X# J2 f* E' G2 i
  2. setTimeout("window.location.href='b.html'", 2000);1 U0 f( i1 ?- W0 i
  3. //下面两个都可以用6 z& x; o- x! b5 s" G( @
  4. //setTimeout("javascript:location.href='b.html'", 2000);8 o7 X5 c& K, Z, |/ G% z" H7 e
  5. //setTimeout("window.location='b.html'", 2000);
    + d  q  D7 Z4 p; Y, W. A- o& g' h
  6. </script>
复制代码
例8:
3 u  ^" G7 @/ |, K  G* u* [. Z
  1. <span id="totalSecond">2</span>4 s) Y6 e" Q) ]& T  Z- M" `3 i
  2. <script language="javascript" type="text/javascript">0 `: `! e. N: i5 u
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;( G- [9 E7 h6 a0 N
  4. if(isNaN(second)){
    5 I) Y1 \, H/ x' ?$ C
  5.   //……不是数字的处理方法! e( t+ V$ h, b5 X) e; N+ A) Y- C" M
  6. }else{$ @6 N2 H6 F$ O  H/ C
  7.   setInterval(function(){
    9 x9 o. o# f# q7 D. M
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    ! p2 M% l  y7 |. S( }! O; F  @" @
  9.    if (second <= 0) {3 d- j8 U; |1 N! g  _* q- w
  10.     window.location = 'b.html';7 ^; c) j8 ^/ |6 y, c
  11.    }
    - M1 G/ {5 z; X  y5 L- u
  12.   }, 1000);) D/ u5 n$ \6 L$ x2 ^, ~6 t
  13. } ' d6 l, B* z* _/ S/ d2 g
  14. </script>
复制代码
. F8 S; H6 Z2 q" I% G. W

$ g# w5 _' |) h6 v% @! k- I6 n; \# x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 12:17 , Processed in 0.108258 second(s), 19 queries .

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