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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
7 h0 b5 A& w' H4 S. n5 f- u; P. z
  1. <script> - B# @9 I3 D7 |
  2. //定时器 异步运行
    2 ^+ S) w  i" Z- W" E
  3. function hello(){ 4 n; K# u2 f( d3 @' w2 {3 w7 w/ I2 d' Q
  4. alert("hello"); % t& @% @" A9 `- `* B9 |, e* c+ N
  5. }
    2 g& q! Z' B% A* F1 e- y7 G, x
  6. //使用方法名字执行方法
    - v3 G9 a9 A; P
  7. var t1 = window.setTimeout(hello,1000); : w. k( z6 O+ D, }  m6 G
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    3 _2 x/ w1 |' u
  9. window.clearTimeout(t1);//去掉定时器 8 d$ m! [9 b' O, z
  10. </script>
复制代码
2,重复执行的定时器 ! t& A2 R# W8 Y2 K. n7 x
  1. <script>
    ( s4 F! x+ m3 t% L2 W- `
  2. function hello(){ 4 e7 \) w( e4 R$ Z
  3. alert("hello"); 6 \3 J. T2 H# \4 Z; e
  4. } % ^% C* A) l. h9 Q" R* w: `
  5. //重复执行某个方法 ! O% I9 ^/ {) |/ J7 s' ~& G1 e4 _8 ]
  6. var t1 = window.setInterval(hello,1000);
    3 U$ [+ t8 O. a. l+ r
  7. var t2 = window.setInterval("hello()",3000); 8 [$ Y. p% l4 d& C! U8 i- j
  8. //去掉定时器的方法 & z4 r9 e8 }' Y: s2 Y7 o
  9. window.clearInterval(t1);
    " D. U0 t  i, C4 k- w3 }6 v
  10. </script>
复制代码
备注: ; X& ]  B8 Z% \* I& x6 G4 L8 m
( C: o/ z! I, l5 `+ M! W- J3 I2 ]
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
6 O2 v1 r, G3 C+ d2 B可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
; G4 T8 A$ m7 \0 H9 R1 P$ o( h( Z% ~$ U: L: M2 Y. l

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

1.倒计定时器:timename=setTimeout("function();",delaytime);. K" X: E5 v' j3 U+ ^
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
: w& V, B6 a9 r6 r" {“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。( O5 e3 l" e- a; q, D7 v% D
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
9 O  b/ t7 a4 h9 z0 F比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
) ^6 T/ @$ ^( T0 c7 E7 `- z- U则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。1 y2 _! R7 x' g5 u' W6 H& L2 R
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
4 i: H  s$ ]( [. QsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
; s$ i- B) D( F3 B7 t, j9 u; RsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
7 S6 O. P% J3 X' c& F( X$ ?clearInterval(对象) 清除已设置的setInterval对象

略举两例。
1 [6 y$ t' G+ e; @  d% q) o例1.表单触发或加载时,逐字输出字符串


/ O& L% V, J. C' e: J8 Q+ E
  1. <html>
    7 J& J& Z6 x/ p: s
  2. <head>
    2 E& ^1 t; P5 E8 c2 J
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! X4 X6 q+ H2 N4 G0 U
  4. <title>无标题文档</title>
    9 y( [: \: S1 e6 K& Y9 @$ j
  5. <script language="JavaScript" type="text/javascript">
    + q) M& g8 b, `! V$ T* w% d
  6. var str = "这个是测试用的范例文字";  U) m# C3 P5 [
  7. var seq = 0;# ?4 F) i& ]8 j" m, z
  8. var second=1000; //间隔时间1秒钟
    0 U2 Q( w4 L* n# e" @1 \* p, I
  9. function scroll() {1 r2 g3 H1 P1 ?& w& G# v9 R
  10. msg = str.substring(0, seq+1);) ~/ Q! S2 a. Q, A9 V1 J
  11. document.getElementByIdx_x_x('word').innerHTML = msg;/ O: b) d  L7 w: j
  12. seq++;
    / ~4 C' e( D( E0 ~
  13. if (seq >= str.length) seq = 0;% q4 X" r. V& r# f
  14. }
    , @2 [4 s% y1 M$ A3 M
  15. </script>& X- F6 `8 f8 E, R6 X, `
  16. </head>- O4 W1 w1 o/ T# C& Y0 Q5 t* U1 w
  17. <body onload="setInterval('scroll()',second)">
    % ^  O5 _' F' ~8 T# G. l* L% J! s
  18. <div id="word"></div><br/><br/>/ u+ d/ v4 Y, ?$ a
  19. </body>
    5 t1 k+ S+ V! P, v0 H4 Q# u4 |
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。6 ?5 F5 }5 m. [  @* ~* ^
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  s" l; W6 e+ \: q7 L! [
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    / C  k0 s1 t3 ~: U3 }
  3. <head>
    # u! V! o) M) t+ G% O
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    4 G  H; J6 D' g
  5. <title>无标题文档</title>
    5 z" n7 _! v% I# B" p
  6. <script language="JavaScript" type="text/javascript">6 b4 T; K# ^% K: Y4 A% p, j
  7. var second=5000; //间隔时间5秒钟2 Q- u5 B, O9 x4 s, b/ q
  8. var c=0;
    8 h9 D3 H; P: n# N: [
  9. function scroll() {
    ' l$ L5 W- ?2 O) o  z
  10. c++;4 n4 C1 N% X/ C$ ]9 h  ^
  11. if ("b" == document.activeElement.id) {4 z8 J* F4 i% g
  12. var str="定时检查第<b> "+c+" </b>次<br/>";, q5 d& ~1 R7 B" R5 l4 d& X; P
  13. if(document.getElementByIdx_x_x('b').value!=""){+ ?, f5 U8 d" x9 f
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";4 I3 p$ ~( Z( O" j" a% ]9 F3 }
  15. }
    1 z3 G% v3 q7 j- V
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ' _1 ^# N( H/ p/ x: _' F: F& w
  17. }3 U- b+ E4 A8 }) i  e) M1 x
  18. }) e1 m8 c$ {+ W* i8 R4 ~3 k
  19. </script>
    . Y1 F( Y1 ?3 _8 j/ H. C
  20. </head>4 J- a& v/ T$ {9 z" R& [2 C; R% W2 e
  21. <body>
    + Q$ G. U7 I: C/ a* x, q! I
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
      Z7 n( U+ y( P# w- X
  23. <div id="word"></div><br/><br/>) ?% g5 L  D& X5 T3 |% S# B$ \
  24. </body>
      a3 c% B" N# }8 G! N" @
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。& T1 @' h  C% n; m" Y3 j
  1. <html xmlns="http://www.w3.org/1999/xhtml">4 |" E* w  d$ \( U9 m/ P) ?+ G2 P
  2. <head>) p- M3 L& v7 o
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />3 H% C/ m7 s0 ?( ], }8 `' y$ o( ?
  4. <script language="javascript">7 E$ n9 C4 l  c) s
  5. function count() {# c/ E* `7 z/ K6 P1 s
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";" b# z  Q$ W1 ?2 ]) o0 O
  7. setTimeout("alert('十秒钟到!')",10000)# r  Y  _* X+ ?4 j; r
  8. }
    9 H2 S3 e9 d/ T; J$ ~! ?- H
  9. </script>/ ~' b7 K- ^+ @6 v% k* ?' z+ Y  U- [
  10. <body>4 W& P6 i( I; ^, N: v2 ~/ j3 Z" H
  11. <div id="m"></div>4 d- u6 M) J$ _
  12. <input TYPE="button" value=" 计时开始" onclick="count()">( W' n& ~: z3 Q2 H
  13. </body>
    : t: \4 ]1 s; g, s* w- }
  14. </html>
复制代码
例4:倒计时定时跳转. g% e! c3 n! D! G, g4 T: H# M
  1. <html>4 R3 ]# {) G: `8 \. m: V- e( n" Y
  2. <head>2 g  L1 v7 b# i  H
  3.   <base href="<%=basePath%>">
    4 V% `3 r1 O0 \1 V. Q$ A: r
  4.   <title>My JSP 'ds04.jsp' starting page</title>$ ~) ]. v2 c: m& _
  5.   <span id="tiao">3</span>
    : p. p+ i! r% I' P5 W% p8 U1 K6 [
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    % p; S1 d5 Y/ `1 N; V
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    , k4 j, V; g) Z: W' w, P$ M5 A
  8.   <!--脚本开始-->
      e; m8 i. N6 u5 D# ^" \. {
  9.   <script language="javascript" type="">6 D1 k* }: z0 L; b8 {! I
  10. function countDown(secs){$ E% V: ~( ^! W( X  n4 R
  11. tiao.innerText=secs;
    - w5 V& v4 s7 {7 P0 O! C
  12. if(--secs>0). \3 l# l& V4 W- x/ K# w
  13.   setTimeout("countDown("+secs+")",1000);  T" a+ u* T( a
  14. }
    " ]2 v( _$ ^: ]# f- h5 u
  15. countDown(3);
    ; |* c$ e$ i! M: h% `* ^
  16. </script>
    : g, c; f$ U6 X) z: t. |( d
  17.   <!--脚本结束-->" F0 p+ \( M" e: u; c
  18. </head>
复制代码
例6:
/ j6 m0 I' [3 s7 g5 }
  1. <head>
    0 I$ I2 n  h5 j
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> , H  [% ]: j5 K" k; G
  3. </head>
复制代码
例7:; G6 w& X( b& C3 x
  1. <script language="javascript" type="text/javascript">
    : I3 `! v* w5 o8 y& p. ]7 \
  2. setTimeout("window.location.href='b.html'", 2000);; U! \/ N4 k8 T% v# \
  3. //下面两个都可以用
    - @% w* W6 S0 L3 V3 S4 u
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    , b6 z+ D: O- Z' J
  5. //setTimeout("window.location='b.html'", 2000);8 _( ^& U; m' v3 z
  6. </script>
复制代码
例8:  t7 F- V* J9 i5 W
  1. <span id="totalSecond">2</span>
    . B! P+ S/ p0 M
  2. <script language="javascript" type="text/javascript">+ j. U6 u  a* F+ Z6 ?1 n, a2 U
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    3 s( g2 r) A# \/ B! J5 B" C/ s" ]
  4. if(isNaN(second)){
    ! q4 F+ W( F6 h! G
  5.   //……不是数字的处理方法
    . p( y: z+ b! v3 l! u' J* k% _
  6. }else{# c1 m: ]% h; j; h) A# A. q! J+ D
  7.   setInterval(function(){. e! \2 [2 g$ |+ }  B9 j* w* U
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;2 [+ I2 E5 L: ~$ Y& l6 l# l7 d
  9.    if (second <= 0) {
    & c# s3 p" G" r
  10.     window.location = 'b.html';6 n$ H/ D$ p5 g! Q& T& W3 z" B
  11.    }" r5 p3 A( M9 |/ O! N) ^
  12.   }, 1000);
    - |6 J' q; V* J7 h1 r( z
  13. } 7 d. [4 c2 z- E5 e! F2 [* Y  v
  14. </script>
复制代码

" P# y# y- W! a0 Y6 f
3 `' X+ Q  j* G: |  S
1 H% B( b  H& ]$ Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-7-19 15:53 , Processed in 0.068256 second(s), 19 queries .

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