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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
# v# W5 C. k" f$ c0 b. x+ b
  1. <script>   O; z- [" `, _
  2. //定时器 异步运行
    ! Y, f; s. ~9 ]9 f
  3. function hello(){ & B7 i) H4 s$ W6 j- @/ N
  4. alert("hello"); # _3 r) ^- E6 d; ~( t. M
  5. } # W8 p" k8 I( Q& M$ D  K
  6. //使用方法名字执行方法
      N% R! O; J/ h+ Y6 J
  7. var t1 = window.setTimeout(hello,1000);
    3 B8 A, B9 i  x% a! |4 u
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    & V4 H+ J- S2 T  I
  9. window.clearTimeout(t1);//去掉定时器
    8 U* N  o. Y3 x5 L( n7 J. ]6 C
  10. </script>
复制代码
2,重复执行的定时器
# l  o% \9 u& g( ^" T5 b
  1. <script>
    3 h: ^; O6 d% C" M2 q) j
  2. function hello(){
    0 k/ j5 O% S: G/ h# Z$ ^
  3. alert("hello");
    " a) G7 n. T1 A$ o- l6 N
  4. } 6 ^2 K, ~' T$ H' l
  5. //重复执行某个方法
    5 l4 K# p( `. s* w) `7 A* ]( H
  6. var t1 = window.setInterval(hello,1000);
    3 y) b3 d( U3 X( C
  7. var t2 = window.setInterval("hello()",3000); % u0 Z! z% U- |8 k3 A) F
  8. //去掉定时器的方法 # U6 r5 O0 l, R
  9. window.clearInterval(t1); 1 H& Z) s  a' Y, E' t, W( k5 X- f
  10. </script>
复制代码
备注: # k( f% }6 U8 f/ n( W2 [$ E
9 Y9 d2 x) S' S8 a9 C0 E( u
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: * E, ~) @1 \) f, K% ?% L
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。1 C) u* O% b8 y$ p7 ?# D! b# }
' {  u8 _# T$ }) k- S5 w- b! ?: }

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
- `3 e5 d! H$ `, J& Y1 G0 ]: X3 V) I2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
  M* S- j1 Y, V$ U' a% X# v“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
& p" b3 f5 Y" X- Q/ V& i  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。9 p0 d5 ?6 Q7 V; ?
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,8 O7 X# s, Z- Q2 H; P5 b- J( \4 G
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
& z9 H+ t% G( F" w比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。8 a- l8 a+ S7 S9 T+ Y2 ^
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式./ M7 ~+ ]$ [- ?4 E3 N
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象$ e' @/ \7 T: L5 y# R0 V7 d
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
' u# l/ l9 ]6 S8 }* G) L例1.表单触发或加载时,逐字输出字符串


/ M. b' O+ N4 A
  1. <html>. ?5 I3 @" r# c
  2. <head>
    8 K8 Z5 a2 Z, ]
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    & o& `% A" J1 ~
  4. <title>无标题文档</title>
      w; a3 p& |  L: n. v) o( ?' N: G" `3 H
  5. <script language="JavaScript" type="text/javascript">6 v: l+ Z. W5 n, k4 I# Q6 o$ o
  6. var str = "这个是测试用的范例文字";
    ; c" D9 `: Q% L! a0 _2 G9 Z, g6 L* T
  7. var seq = 0;1 ]. t3 n% k* h5 h
  8. var second=1000; //间隔时间1秒钟8 c- S8 Z$ |3 Y! l
  9. function scroll() {6 h0 J4 I: ^; @8 G3 ^$ n! U
  10. msg = str.substring(0, seq+1);  k9 z8 @. U* j& x* B9 N
  11. document.getElementByIdx_x_x('word').innerHTML = msg;# j) G- s- a: c
  12. seq++;7 R! [6 Q( v3 D3 k3 l: g0 G% i" E4 g
  13. if (seq >= str.length) seq = 0;
    , B/ K. u, m% J
  14. }( E, q/ s0 ?/ c6 I8 }
  15. </script>
    - z! I6 c. t4 q6 M+ U0 {( ]9 N
  16. </head>, v2 l  M. }& V' ~5 t; f
  17. <body onload="setInterval('scroll()',second)">
    ' q3 F! g' Y' m9 G7 A4 q( Q' [) H
  18. <div id="word"></div><br/><br/>
    $ \5 O, Z% T* _. m+ X( b. X  {; Z
  19. </body>) \" A: B. a. q9 n- D
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
" |; e; G/ Y3 }5 y) S
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  h4 n2 q8 Z7 @+ D$ R7 I2 N
  2. <html xmlns="http://www.w3.org/1999/xhtml">: y# p% }* M$ B! I- K
  3. <head>/ G; ^; j3 |2 D; W/ x/ S2 ]0 z1 B9 Y
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    : E# D0 |  {3 c' G/ E0 u* X
  5. <title>无标题文档</title>
    - u) V0 b+ t' V. P( O
  6. <script language="JavaScript" type="text/javascript">% N" [0 ~! s; N1 d, j/ ]; O
  7. var second=5000; //间隔时间5秒钟
    $ B8 l. A' o+ s0 f
  8. var c=0;
    ( o! e6 Z" f' l6 w/ F+ H' L
  9. function scroll() {
    3 `) K4 d0 U' o4 Y! r: A* S& q5 }# {
  10. c++;3 j" F) H8 G+ ^% x, o" w7 E- M
  11. if ("b" == document.activeElement.id) {) E& n( |0 `# V% u: s( l
  12. var str="定时检查第<b> "+c+" </b>次<br/>";- ^3 Z) O5 k6 d) n! Z
  13. if(document.getElementByIdx_x_x('b').value!=""){% }& }, W5 i9 ^; E
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    # _4 m8 k# w3 ?( D
  15. }
    ' f  ?$ V, [: X" a% t8 P
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ) U: i" @* s' A! n. r6 h% Y
  17. }
      c( D; \& v( M- w3 h7 ^* F8 V* @- ?
  18. }
    2 Q: q7 o& t  w4 T  v% v
  19. </script>6 V% O: B7 Z( q- L6 l4 y: \: R
  20. </head>+ o/ R  s6 ^8 V4 z4 y8 B' x
  21. <body>
    . k; W8 T, R3 l. V3 V+ \. W
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
      t: w) a( G# Q# G* X: {. H
  23. <div id="word"></div><br/><br/>
    ; [1 S( _8 s9 d4 ^! p8 d. v5 W% \
  24. </body>
    9 X) ^' V  Q/ I: z3 X5 y3 E
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
& E# }: S$ A; O0 _% j
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    8 [" L0 q. Y6 t" S
  2. <head>
    * O" D& n1 p% D  V
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    5 Q. d, _" u% D) m$ G5 H% H( X& W
  4. <script language="javascript">) R0 w2 p# K- X) e  [2 m" P" _% I* }
  5. function count() {
    # ~/ U$ o6 |2 s" o3 P4 t
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";+ F/ m0 s, i: }
  7. setTimeout("alert('十秒钟到!')",10000)4 h0 i' M  q! ^, _$ |' p/ F
  8. }$ m9 Q) z' ]) R; W
  9. </script>
    ; |2 k, P( `4 ?1 B/ i6 d
  10. <body>6 v) I! Q) D( j* k) |: l" C
  11. <div id="m"></div>
    5 o' R+ c- \) \
  12. <input TYPE="button" value=" 计时开始" onclick="count()">. E5 q6 H0 K- W4 H
  13. </body>
      J8 }& j) L. R$ ?
  14. </html>
复制代码
例4:倒计时定时跳转- A- `3 [* j9 z4 O9 I+ i
  1. <html>$ H+ D5 j. @1 t# w( Y- d+ g1 P
  2. <head>
    ) ]' Z5 `, }% B* @- B
  3.   <base href="<%=basePath%>">% X. P, v9 h/ d2 h# a
  4.   <title>My JSP 'ds04.jsp' starting page</title>: K& b& t5 f* T2 r) V' z/ H$ F  G0 B9 |
  5.   <span id="tiao">3</span>6 z! k! p: Z& ?! d3 \
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    " x3 |& j7 |2 w/ c
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>& H" F# M2 p# K, Q. V
  8.   <!--脚本开始-->
    ' w) [0 t& ~" O4 Z/ m, z9 U1 B9 L
  9.   <script language="javascript" type="">
    + `: Z" E) z; Y. p! L0 q
  10. function countDown(secs){
    2 G! R* x6 I2 q3 B! V; I1 G
  11. tiao.innerText=secs;9 i, B. y6 @5 K# x+ k
  12. if(--secs>0), q2 f) d% d. l
  13.   setTimeout("countDown("+secs+")",1000);
    , V# w0 G' H* k. w% k' `: o0 S5 o
  14. }: H' {9 w# S/ ]2 k( s3 E+ l  [
  15. countDown(3);
    $ p& a" M" g# R- @
  16. </script>
    , T+ \) A5 x0 w8 S4 X& z
  17.   <!--脚本结束-->: q# F* I" l! C( K9 ?8 R1 `
  18. </head>
复制代码
例6:- o! y! \. e& R: d
  1. <head>
    : h3 r2 R& K3 ]! Q7 S0 G
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 6 D8 P. J+ r3 e6 s2 l
  3. </head>
复制代码
例7:
4 b0 |; D5 @2 D4 R3 S1 @# M: ~
  1. <script language="javascript" type="text/javascript">
    : P/ ^' [* q0 m
  2. setTimeout("window.location.href='b.html'", 2000);
    ' ?9 h4 f. M) p9 E- F
  3. //下面两个都可以用/ ~/ ?  }* Y- R  \0 E- M" o* X
  4. //setTimeout("javascript:location.href='b.html'", 2000);  T9 `( Q5 c% m4 a7 X
  5. //setTimeout("window.location='b.html'", 2000);
    : U$ {* W' x- T8 x5 e
  6. </script>
复制代码
例8:
- M" ]2 ^/ B& h% r1 i% w- q. H
  1. <span id="totalSecond">2</span>
      `$ V5 h: I0 U7 e: ^
  2. <script language="javascript" type="text/javascript">- B/ @' j' e. s$ u
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;3 |1 j$ W# |& y7 {/ o: Q/ a
  4. if(isNaN(second)){
    1 p5 {: c, {* e" H- Y
  5.   //……不是数字的处理方法5 D  r6 X" ^  s: d
  6. }else{
    8 B0 [* R4 E- x% _
  7.   setInterval(function(){$ \3 z/ {& V7 M
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    : ?" v0 Z% G0 u* S! W& A' z( ^- D
  9.    if (second <= 0) {
    . T' t9 S1 ?- N% z
  10.     window.location = 'b.html';
    : X" S! K$ K- I
  11.    }/ h; H$ C- L/ {& E
  12.   }, 1000);! f8 N; d' t, g7 ~& Y7 N; T/ E1 s
  13. } ' e5 T5 \3 @" i. J( c! S* N
  14. </script>
复制代码

$ L# w% _) \9 _, Q9 Y
5 G3 R! [; B$ t  M; x/ r
% F9 J8 C0 f, k! k! m4 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-4 13:00 , Processed in 0.075931 second(s), 19 queries .

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