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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
) W7 A+ c; P% i; s- N$ m
  1. <script>
    $ @+ s  Q1 E- K# \6 V6 b% k
  2. //定时器 异步运行
    * b. `* k! S* a( o- s4 o
  3. function hello(){
      r1 ?; J6 ~! s' j
  4. alert("hello");
    4 o( {0 d4 B& ?
  5. } 0 N! I( i/ _9 x/ [- c
  6. //使用方法名字执行方法
    5 |: _4 J" D' Q+ Z$ R: D* m  q
  7. var t1 = window.setTimeout(hello,1000);
      f/ r- i! n5 R! F' I$ l8 G
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    " F+ A# Y/ X; @$ Z+ R8 l; g
  9. window.clearTimeout(t1);//去掉定时器
    3 M2 a- o  K) d- q
  10. </script>
复制代码
2,重复执行的定时器 2 |) m5 u8 I, r: q- |/ n/ B4 Q
  1. <script>
    2 Z: f6 {; ]( ]4 Z, f/ f
  2. function hello(){
    * |& U! R, e4 p* t
  3. alert("hello"); ) h7 d* L" ?) L3 W0 g
  4. } ) O# a: ?2 u' |/ c
  5. //重复执行某个方法 9 M6 k. d5 v, a, R
  6. var t1 = window.setInterval(hello,1000);
    0 w3 ?. b$ P- J* \0 ?
  7. var t2 = window.setInterval("hello()",3000); & w# d5 u' I' r* \9 i4 O# o  E' l
  8. //去掉定时器的方法 * F" C. c7 k( I- Q3 N
  9. window.clearInterval(t1); 3 n/ k# R2 }+ B' ~: z9 j
  10. </script>
复制代码
备注:
9 A% \" V5 z) N! k& ]/ [4 J5 T) u* a" R8 g
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: $ u  X" U" B, f8 L4 t
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。2 q9 J5 x; @  @" f9 P: X

8 S1 U0 t5 F2 d1 g! d4 @7 r" W6 m0 g

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
% o( ]* `3 \: _6 a: }2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
, X9 b( u. q8 H9 p& C“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
0 i) Q7 {: j$ u2 W$ ?& J$ c, {5 L" c  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
4 t2 s3 x5 z# z7 W3 y9 U1 E& w# G' T比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
; `6 r) k3 _: R8 Y则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。# ?4 B' G4 w8 x& l; ?' k
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。( W8 h/ _3 s, L5 q# Y% e
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
! ?2 c3 F3 U* CsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象6 f; m/ |$ O. E& M8 |/ m
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
. y8 Y( `# m5 E, ]例1.表单触发或加载时,逐字输出字符串

8 y: x4 O5 _- Z8 o: p
  1. <html>; f/ t4 o$ Y8 e9 x* t
  2. <head>' v8 ]) C6 m5 W9 a3 h  R0 h2 A8 F
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />$ }6 K: Z0 y* S# r/ f$ v( @5 o
  4. <title>无标题文档</title>
    # z7 l5 Y/ G* H5 r% r
  5. <script language="JavaScript" type="text/javascript">9 \- o6 D0 ~0 m- N, S& R$ T
  6. var str = "这个是测试用的范例文字";
    " u; v/ P7 L5 t; u8 f
  7. var seq = 0;4 M( P1 q' E$ I9 R2 Z1 }
  8. var second=1000; //间隔时间1秒钟
    5 i- c- S' S3 @! W2 W& Y
  9. function scroll() {/ i  h1 G2 k1 s: x& ^( C
  10. msg = str.substring(0, seq+1);- c+ m8 f% Q0 y+ }: i$ F6 o
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    ; u6 Z8 }% T8 C
  12. seq++;
    # K- @- M, c. p7 u$ u* Z; ~3 O
  13. if (seq >= str.length) seq = 0;
    8 l; x: |- E* Q1 d( M2 Q
  14. }
      G: _% j5 f2 Y. \# U) A
  15. </script>
    ; e* I0 X  P9 Y! w- Y9 r
  16. </head>9 Y; s3 h' p' }# n( l1 S" }+ z
  17. <body onload="setInterval('scroll()',second)">
    1 j# n# F, B6 _! t2 ^
  18. <div id="word"></div><br/><br/>7 y) n4 q% u  Q8 O8 g
  19. </body>' Z, a; p( C- F$ _
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。, }( V; m* M- O1 {" \; T: e
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    ! L" S6 e1 P3 A. o# D
  2. <html xmlns="http://www.w3.org/1999/xhtml">! k, L! Z& i( A  }
  3. <head>$ N! `; N5 y/ l( K' Y  H, L% N
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      N- C- ]- Q0 P5 n) M/ q! x0 h
  5. <title>无标题文档</title>
    & W3 L/ c, |1 x9 E% k. l
  6. <script language="JavaScript" type="text/javascript">8 n6 X6 I* \9 q& \! E% T8 ~+ j2 h
  7. var second=5000; //间隔时间5秒钟' r5 I. k% v, Y& L1 e6 _* L0 s
  8. var c=0;! v" }6 i+ n# P+ z( t
  9. function scroll() {
    2 c4 w$ P' u7 k* ]- U
  10. c++;9 v$ c& c0 ]; i, s
  11. if ("b" == document.activeElement.id) {
    6 f' t. @$ I( n1 B. X
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    ( f" f$ g, _3 r1 s8 W- l, v5 ?
  13. if(document.getElementByIdx_x_x('b').value!=""){' X$ \: o) ^8 C$ C4 `8 X. g
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";/ |& V+ U2 T1 c5 }" L& J3 N
  15. }
    8 k6 _+ b6 M4 W
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    4 l; }) d; _- g. f5 q' n
  17. }
    & l9 k* {8 l7 S$ N5 E
  18. }
    + J! _- R" _% [8 j' n
  19. </script>
    2 ^2 {: ~1 Q. ]' M: f; h
  20. </head>; {/ R7 Z" m3 w; }' {
  21. <body>
      A% {' Y) r$ j( f) a( Z
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>1 d5 o( T& Y# }& G  N
  23. <div id="word"></div><br/><br/>2 G5 p* f/ U$ I( d* C
  24. </body>% K  y2 U! ^/ d4 G2 P7 p" s$ }. y( }
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
+ Z8 u3 O) l$ L! L
  1. <html xmlns="http://www.w3.org/1999/xhtml">  d. k; P7 g' g9 K- l
  2. <head>
    5 k) t4 ^& O; |0 c
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! H" @% a- N. R* g
  4. <script language="javascript">) \9 O' i3 e9 w. g( |3 N$ e, z
  5. function count() {
    # `- x' c- B) a: l; _$ e
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    * \% O" F3 m9 g/ j+ j
  7. setTimeout("alert('十秒钟到!')",10000)6 Z6 V9 x- d# @% K$ V( ?; _4 G
  8. }/ x$ m+ D) d. N' ?: ]6 }
  9. </script>
    3 c2 i, `2 R: l7 E) {( f5 q3 y) j
  10. <body># E0 \% Y; S+ }1 Z
  11. <div id="m"></div>  y. i* p- O5 W$ h/ o
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    . P: E, n- |8 s6 t- J- [
  13. </body>
    1 V7 M" K& y  M4 B) H1 b
  14. </html>
复制代码
例4:倒计时定时跳转
" H1 u: |: S  p: J) W0 t$ v! Z
  1. <html>' j+ z* m/ K/ m; s0 _
  2. <head>/ J1 S. j/ }6 J4 S. J
  3.   <base href="<%=basePath%>">
    1 p8 @1 x' ]6 @) n) j
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    8 d* M/ [; M6 x% W% k. g/ Q2 t" a
  5.   <span id="tiao">3</span>" j+ v4 p6 [# ~. W, G
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……9 ]2 @( ~$ N6 i7 k( A" n# L( B
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    4 c5 b7 h3 w  Y% P- f( \* z. W- C
  8.   <!--脚本开始-->/ A5 z6 z4 E8 c+ |- L% l# p
  9.   <script language="javascript" type="">: A' F4 R* Q4 d( J  R, A  _
  10. function countDown(secs){
    + `" J4 y7 O% h  u: S/ G
  11. tiao.innerText=secs;* w( T' P9 D3 R4 ~' P" K, G% P4 |
  12. if(--secs>0)( w  ?5 @0 ?! l5 H8 o# z$ I
  13.   setTimeout("countDown("+secs+")",1000);! z/ c7 L2 f" S; q* ]
  14. }% p9 d+ N. Y8 X2 o" ^0 I
  15. countDown(3);+ a* E' e5 v2 t+ S/ M
  16. </script>
    7 C# u: w0 {0 K
  17.   <!--脚本结束-->
    / s) O- _+ ?% H# d
  18. </head>
复制代码
例6:6 r7 T# ~, S7 U/ m$ S( E5 l  @
  1. <head>
    7 T$ B# f6 T# r; r. I8 ?! m: Z
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    3 j0 z9 U/ q* m1 a3 i( o9 g
  3. </head>
复制代码
例7:
. W6 k. a; `" t3 |) L- B+ _: l
  1. <script language="javascript" type="text/javascript">6 l( J& H, s2 |' C2 l
  2. setTimeout("window.location.href='b.html'", 2000);2 C5 c) t  x( c
  3. //下面两个都可以用. ~* Z, ?2 n: \; n9 D: q; k( B, b
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    0 I- `4 {! _: m' I" x0 o/ S
  5. //setTimeout("window.location='b.html'", 2000);
    * G5 @( h$ j2 v( l& m  F  r+ r+ g
  6. </script>
复制代码
例8:, j/ _; ?8 V. u/ [2 c- \, l+ q: V
  1. <span id="totalSecond">2</span>9 X, _5 s$ ]* P
  2. <script language="javascript" type="text/javascript">
    0 l2 \4 Y4 n5 ~" X8 m
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;1 n5 q# `7 U4 ~6 E1 w. x# F. L
  4. if(isNaN(second)){
    & L  j$ c3 w) a, I
  5.   //……不是数字的处理方法$ {7 f6 U9 A- s4 _5 t/ i; B5 }
  6. }else{
    0 U0 d/ u3 E" b/ }0 Y3 g' B
  7.   setInterval(function(){
    % ?" l2 W6 O0 m: A7 h$ H& v, G
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;6 r* T: G8 ?9 t  ?' n4 O' O
  9.    if (second <= 0) {
    . h5 h; h3 Z. Y
  10.     window.location = 'b.html';
    . h  r% x5 C- L' l2 C& M( v' J
  11.    }
    2 h; L& F/ \' _. P. Q  T
  12.   }, 1000);: I" F0 r: X4 C+ t5 k
  13. } 8 M3 G. r2 m% Z8 F# m" J3 {& J( X
  14. </script>
复制代码
$ |! c3 K1 `8 u/ B
: S0 I+ H7 H/ g. v

, g; l5 z& J# }  W4 \0 s: m5 Y- e8 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:25 , Processed in 0.069598 second(s), 20 queries .

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