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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
6 g" K4 W3 D" o+ }5 w
  1. <script>   a* z. w# V7 Q& t+ Y% l2 [
  2. //定时器 异步运行
      f3 J- u5 ^/ W
  3. function hello(){ / I2 r6 ]/ Q# r2 V! _7 h
  4. alert("hello");
    ; _1 b1 N$ F5 i$ W* O" M
  5. }
    ; G0 p# n' M0 j
  6. //使用方法名字执行方法
    , z% p/ W. a" n$ P, _
  7. var t1 = window.setTimeout(hello,1000); % B0 q! ~+ l1 j( M; Y
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 3 _2 o8 s6 N7 `4 A; @0 B, {, C
  9. window.clearTimeout(t1);//去掉定时器
    8 J3 {- v. ~3 X0 a" {
  10. </script>
复制代码
2,重复执行的定时器
7 k& s( [7 k$ M; b3 A
  1. <script>
      [0 r- g$ R" U* S( [  W/ w$ G
  2. function hello(){ * w, N3 H* p% V8 ?
  3. alert("hello");
    / u8 O% r& O" I9 y& V" Y
  4. }
    3 f! T" ~# G) V$ F6 {9 g
  5. //重复执行某个方法
    3 J$ R, Y1 K: a4 V, L
  6. var t1 = window.setInterval(hello,1000); ' z' R" ?1 _6 {8 ~: u8 g4 k
  7. var t2 = window.setInterval("hello()",3000); $ d2 I, R/ E) W5 F
  8. //去掉定时器的方法
    7 o- Y, _' V7 j6 F0 o
  9. window.clearInterval(t1);
    ) _, \1 u' t  X: _
  10. </script>
复制代码
备注: 2 D. E7 b' f& O; Y' H

4 t, s2 K: ~! u. T0 v如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
8 K$ Y5 k# m" M4 {" a可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。$ Y- e' `2 r0 y/ _$ ?- h0 J0 B" G) C

' t# P! m1 U$ |* [; z: {0 |

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
3 x! L1 E1 Z- k9 O5 {" f- }2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成7 r( V/ j& r: L, b* \, W
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
1 _' _& ^6 \" y: L- D6 ?! j  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。, \' k! c0 p! u/ P
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
" a  q0 T" S0 d1 L7 h' C$ N则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
( u- T1 d* Z% ?3 b5 s比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。4 S5 e: U3 U1 A
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
* I' l' {. A7 h7 Y' H8 XsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
4 G  C& e+ k8 t. {' t1 m# eclearInterval(对象) 清除已设置的setInterval对象

略举两例。
- m( L  l( u  f6 `: E9 G& W, |例1.表单触发或加载时,逐字输出字符串


6 C! {2 x' M% S4 x/ |+ R
  1. <html>! \) H4 J7 \% c' a% w+ W# ]
  2. <head>* q7 c; |. A1 W
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    9 x; b' a5 W4 t
  4. <title>无标题文档</title>
    , w# W' p1 u$ w0 T2 H4 o
  5. <script language="JavaScript" type="text/javascript">, l! M: \7 K3 K3 B) K1 q% I' T: L
  6. var str = "这个是测试用的范例文字";8 ~) V9 _  T* i6 g* {
  7. var seq = 0;% `. x% `2 Y; g% P5 M, `. j# A- Q
  8. var second=1000; //间隔时间1秒钟5 U9 d; B/ S7 I) B" d: h3 o% R
  9. function scroll() {1 p3 z! p5 ]1 x% Z. ]
  10. msg = str.substring(0, seq+1);
    9 h$ N+ y1 ^/ y; S4 }5 \$ V) r
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    % g$ m! t- w! F; {* I8 h
  12. seq++;5 G1 y! m3 u+ ~1 |
  13. if (seq >= str.length) seq = 0;
    5 F' K9 w" h8 L: K$ u2 K
  14. }  m! X+ d  k2 a3 P2 `. T9 q
  15. </script>
    ) ^. [/ d7 C* @8 @$ c7 i4 K
  16. </head>: H' Q; V5 D9 ^+ E/ L' ]
  17. <body onload="setInterval('scroll()',second)">
    9 }* G- G3 k, V2 J% v
  18. <div id="word"></div><br/><br/>
    ! K  W! V) G0 `" Z
  19. </body>
    * o# o0 @! m' H2 w/ f) p2 m
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。* L( W4 W9 g0 v" A$ f  @  T, P$ [
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">/ ?2 \1 e5 d  I0 _) J9 u! ~0 H( U2 L
  2. <html xmlns="http://www.w3.org/1999/xhtml">! _% y7 ?; E6 t1 R) N4 I
  3. <head>
    3 u' f2 @, p& y! X1 |% A% W/ L) C
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />0 q% t! Y. Y' K8 u$ j) Q3 t3 i
  5. <title>无标题文档</title>
    % w5 u/ W3 Q7 p8 U, Q
  6. <script language="JavaScript" type="text/javascript">
    7 B3 a- o: R! c, W( a) }
  7. var second=5000; //间隔时间5秒钟
    5 M$ E/ z( Q0 b+ _+ r0 D; Y
  8. var c=0;
    0 g  D- N* B$ k! ?
  9. function scroll() {3 Q3 H; W5 y  ?0 g
  10. c++;
    8 `0 s+ \& G; i# {5 e
  11. if ("b" == document.activeElement.id) {
    / n( r/ W. H5 `  b# e& k# g
  12. var str="定时检查第<b> "+c+" </b>次<br/>";0 H6 b& ]/ |+ m
  13. if(document.getElementByIdx_x_x('b').value!=""){) O2 j5 ~. y' o6 i2 K( o9 D0 a
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    4 D" q* n  M* d+ j$ U+ u, y
  15. }
    ) N" R) a1 z2 }* o# [6 f4 b
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    8 p/ S; F2 k* ~* w
  17. }
    8 ~3 |5 ^: \0 O* Q2 u
  18. }
    8 z- ^3 X* a4 D
  19. </script>
    1 |- ^8 J! h8 e) q: c$ X
  20. </head>
    ) P) L7 h7 {5 y" c9 q7 V3 b
  21. <body>- o& b% c+ @5 r- F* r7 E
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    2 E6 ]$ \# n% Z4 \- t1 j
  23. <div id="word"></div><br/><br/>1 z) p- v& ^7 Y
  24. </body>* r0 ~3 W- L/ S8 v. \
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。8 d3 k4 E/ t4 n! p) L
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    0 z% b8 ]4 _6 W* L7 h, S) u% t
  2. <head>
    0 Y6 B; `8 [" W" Q) O2 w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 B, q4 V6 S8 k+ x: H( ]; r5 H
  4. <script language="javascript">4 u/ I) L6 o: M4 d' D4 O
  5. function count() {
    . _; \! J4 G9 K
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";/ w3 _3 d( h  X) d# f
  7. setTimeout("alert('十秒钟到!')",10000)
    7 ~- b4 }) w7 t5 k2 K; _5 p7 O
  8. }
    % v8 X% L* H  H8 e) ]
  9. </script>
    0 A$ A; ], I) S
  10. <body>6 l( s# \/ [- ^& A
  11. <div id="m"></div>3 o! U& R" P* d( m$ |7 u3 j
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    7 W  e: ]* D$ B3 c
  13. </body>, V1 Q; V: d) C5 c) b5 p: p
  14. </html>
复制代码
例4:倒计时定时跳转3 z7 H9 ~/ j! O0 t2 Z
  1. <html>
    # p4 n% q5 P7 M% N
  2. <head>/ d3 H1 x' m, r. F+ h4 k5 T2 o2 h
  3.   <base href="<%=basePath%>">% a# Q, u2 G0 S  M& Y
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    * z6 `- W6 x0 X0 D
  5.   <span id="tiao">3</span>- M# k% ^. J( R
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    + Y; U! @; N  ]+ W/ [: [
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>' I" l! ~8 u& X3 b( x: o
  8.   <!--脚本开始-->5 c% g& U, T2 W+ @( [5 q$ |
  9.   <script language="javascript" type="">
    * }( B, s: I& q2 d$ w% p& N2 J/ G6 `5 L
  10. function countDown(secs){% v! k! _% q, X$ z8 J: ^& Y4 U
  11. tiao.innerText=secs;
    $ s2 [7 a0 r- `: `6 B; l
  12. if(--secs>0)9 e! J; g- \# P" g: z! W
  13.   setTimeout("countDown("+secs+")",1000);
    5 d7 q1 o/ `& J( A6 y
  14. }7 s  N( l  f: }
  15. countDown(3);
    6 E6 w- Z. S: H: W' E5 w
  16. </script>- X! ^; s, y" ~2 t' ^# M0 V+ k* \6 B
  17.   <!--脚本结束-->8 y! Q3 t- B, b2 o! F; q1 X0 p0 I
  18. </head>
复制代码
例6:$ t( u  ]8 k5 ~) U% p. @# {8 L
  1. <head>   [% I6 ~2 v& l
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    6 ?/ y( u3 d1 ^! w1 ]. I
  3. </head>
复制代码
例7:
' l. p* o* ^- Q
  1. <script language="javascript" type="text/javascript">1 N8 _6 l, S  n
  2. setTimeout("window.location.href='b.html'", 2000);4 f- W1 Y7 d+ F
  3. //下面两个都可以用
    * G+ k, S! G8 M+ q3 \8 [2 e) s8 |
  4. //setTimeout("javascript:location.href='b.html'", 2000);$ y# L* p& b3 z
  5. //setTimeout("window.location='b.html'", 2000);
    $ G+ |0 {# [+ g# V9 x/ O
  6. </script>
复制代码
例8:
6 l* d0 d0 l) \, K* U: c
  1. <span id="totalSecond">2</span>7 D! W& b. ^' f7 D% M% Q3 m! i
  2. <script language="javascript" type="text/javascript">1 ^" `+ t- n3 A; \. v* h
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    4 m7 D6 ]3 G. g! |* k, w5 Q
  4. if(isNaN(second)){
    ) o7 E- ^0 {6 y) ^0 R# m- B7 b) y
  5.   //……不是数字的处理方法# R9 g# X, p' u3 V: B% ~0 `* L6 K; W
  6. }else{
    : E; a6 t3 R+ m& l5 J, B
  7.   setInterval(function(){6 M# z) y. N( X3 `+ I7 h
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    3 S, g  R0 s- Z- Z
  9.    if (second <= 0) {
    0 [1 g* T# W' }; I7 G
  10.     window.location = 'b.html';7 Z+ ^, J4 ]$ N& \7 H/ K
  11.    }! r. d" }9 V/ \& V
  12.   }, 1000);9 S  }7 H' V( P
  13. }
    1 b. Z% j) ~. X8 S$ `
  14. </script>
复制代码
) k- F) o3 {3 X) H

1 K5 I$ z1 E/ n: P) S$ C" L; @3 n+ @; [# X; V' T  x$ ^; b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 15:03 , Processed in 0.112769 second(s), 19 queries .

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