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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 6 c2 H* K; u  y) ]
  1. <script> + v; {- P: k7 T8 z4 k
  2. //定时器 异步运行 9 t0 Q9 L; J+ k. A' j6 ]( H
  3. function hello(){ * Z+ A. w5 A% k! u
  4. alert("hello"); 6 I" y, ?0 m1 l4 z( E# S
  5. }
    ( T3 |4 w( p7 G  D% E, \% ?
  6. //使用方法名字执行方法 - `, b9 Y! R3 {3 R/ w# u
  7. var t1 = window.setTimeout(hello,1000);
    % b+ E# n6 l* u) {4 D
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 1 ]1 V, E- D- P% [( {5 j
  9. window.clearTimeout(t1);//去掉定时器 & Y+ }, @3 Y0 q
  10. </script>
复制代码
2,重复执行的定时器 6 u  f  [$ T3 C' h! \9 N5 n
  1. <script>
    ) i+ Y' b. K4 h+ R4 H
  2. function hello(){
    ( @) }  m- y* t
  3. alert("hello"); * L! L5 T) a; B0 L
  4. }
    ( g8 _, P5 i% a9 _
  5. //重复执行某个方法
    6 E( n. X6 y# u% p
  6. var t1 = window.setInterval(hello,1000);
      s- d$ }: C* Y$ I
  7. var t2 = window.setInterval("hello()",3000); 3 S( u) C" ^1 O# T+ n0 J- z: Q; U
  8. //去掉定时器的方法
      V5 ?! r$ q4 L3 m2 J! y
  9. window.clearInterval(t1); " J: t; z2 R+ W* H
  10. </script>
复制代码
备注:
5 G; L) t% p+ F* [/ i8 _7 ^
+ g% W5 V& @( [! [1 j8 o如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: ( B! _! V" j/ T* j$ N
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。' \" W& m4 @" E8 u- n$ ?
+ g- {& m9 R5 x5 i+ N

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

1.倒计定时器:timename=setTimeout("function();",delaytime);, T3 z/ U4 x8 C1 y# j4 H1 h# r- O
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成# l) k# m0 o. Z9 v! n
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。8 F# J" u8 h& V% w  m
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。' D5 Q: V( ^$ f/ r6 t3 E
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,- W: J* q# B+ ?0 A+ w$ K
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。2 r& i/ o6 ?) w& O7 X1 E0 Q
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
3 t; G: O6 k! M- n% U" jsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
, }7 Q# s7 U: U, t  `0 J" [setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
) a7 N& C" S7 Z& D  r9 eclearInterval(对象) 清除已设置的setInterval对象

略举两例。3 B% f+ q2 L' K0 Q% x4 d( y
例1.表单触发或加载时,逐字输出字符串

4 X. j1 M2 @+ w& e; k: y
  1. <html>
    - m* r2 h: i' |* c3 K
  2. <head>
    / Y- T6 O! ]; ]. N" b
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />) ~& ^9 E, u" C( W
  4. <title>无标题文档</title>6 S+ P( M: J# Y9 E3 d% w' N
  5. <script language="JavaScript" type="text/javascript">
    0 C/ ]4 o, s; r! Q5 ]  W
  6. var str = "这个是测试用的范例文字";* R, d4 M9 F5 T6 w/ [
  7. var seq = 0;9 Z" W8 p7 J! `% p7 m
  8. var second=1000; //间隔时间1秒钟
    ( ~7 P4 U8 I# \3 `! y9 Q' t' v: o
  9. function scroll() {7 [: C# l  d1 E$ S0 U* A1 L
  10. msg = str.substring(0, seq+1);2 {; d, g  W1 l5 u
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    ) a2 v$ m) b2 F# W+ V* h
  12. seq++;
    6 X) U& I- o7 v' C$ c
  13. if (seq >= str.length) seq = 0;0 F5 Y# ]' H) M7 e5 K- R, N% H
  14. }
    # Y" D, u3 f& z4 F( A
  15. </script>
    8 ?; q4 v5 C; P0 F$ V. j
  16. </head>1 R9 l+ ?% D. Y* F- E
  17. <body onload="setInterval('scroll()',second)">
    : [; p" C4 V6 M: k
  18. <div id="word"></div><br/><br/>* O- y) v. }: B, G- n
  19. </body>4 p# P+ `7 Q* L
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
7 Y+ h, e) i( g7 a5 y
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    9 ~4 Z0 @+ n' y# o: g. H9 {
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    , h+ X7 ^$ g+ G" f$ y
  3. <head>
    $ i* a. {* u' U3 W7 s- e
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      R6 g# O+ w8 V( z7 l
  5. <title>无标题文档</title>" `1 C9 W" E1 [3 {
  6. <script language="JavaScript" type="text/javascript">% X8 {& c4 n" F: h/ l1 \( x
  7. var second=5000; //间隔时间5秒钟: C) z+ S  X0 M1 f
  8. var c=0;5 ^0 r3 g3 m/ x+ f
  9. function scroll() {- |- N$ e5 V1 O+ x+ q9 z
  10. c++;
      P3 n% z; l. e* c- H4 k7 x: x7 p: y% u
  11. if ("b" == document.activeElement.id) {
    # |; F+ P, Q+ y' X" {
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    + c6 Q1 \% @* N, h' Q$ d) ?
  13. if(document.getElementByIdx_x_x('b').value!=""){
    ( p! g/ x0 I8 l. r: b' l# R- S
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";; Q, f9 {8 B: d. u# Q! W5 y
  15. }
    $ D# J8 f7 g" Z
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ! y. W! e' [3 m7 f  o' T
  17. }
    7 }& P; t/ E+ Z8 M) [& T  X
  18. }* k( o% `5 M" {
  19. </script>
    7 f: W, ~: ]5 r* J3 e8 }& {0 e
  20. </head>
    % m0 A( n- E1 q7 l: t
  21. <body>
    9 e" Y2 k: x, O7 J1 o1 C' v+ d! e
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    & U: q$ ?# t& G& y3 w; z
  23. <div id="word"></div><br/><br/>6 \& x& ~0 }2 H  a6 b
  24. </body>$ h: _* u1 V7 ~
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。0 z  O* o3 a. s* d9 ?/ p
  1. <html xmlns="http://www.w3.org/1999/xhtml">: x# c3 D8 R+ \( j, E$ ?
  2. <head>
    % R+ B1 L8 v: k; p) ?6 p; M
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 i3 T7 O: }" }; d  w. C+ V
  4. <script language="javascript">& u- T3 t1 N  s* s3 a2 a* D
  5. function count() {
    & n  w/ _( G4 u
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    4 n2 U( q+ s2 Q2 R
  7. setTimeout("alert('十秒钟到!')",10000)/ y# H. J9 R& d( V5 }
  8. }! Y4 O/ ^5 B+ Y8 E* Y* ^7 O
  9. </script>
    4 V, s" Y  l" a( w2 e
  10. <body>
    * W, C& `, {  ?: Z. k8 g- n
  11. <div id="m"></div>* u( I/ v; R! b. z7 [! S8 e* J
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    . y8 X/ U& C& q3 R8 Q; C4 A
  13. </body>$ m- ^; Y& P7 q( F+ G$ d) |( E
  14. </html>
复制代码
例4:倒计时定时跳转
# I/ [) K3 ]  m+ s7 Q
  1. <html>
    # A% u3 P. [( L% ]4 Z% `
  2. <head>
    3 H$ }( `! S! \$ V$ }' E  \
  3.   <base href="<%=basePath%>">
    4 G2 o: h; y+ W; ]1 Y+ ^
  4.   <title>My JSP 'ds04.jsp' starting page</title>9 O, w# \. x1 Q% j( o* ?
  5.   <span id="tiao">3</span>
    ' g4 R1 J0 x$ x
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    7 W, r) B) Z' {$ I3 U2 c- U% v! [8 w
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    3 L" v# p1 Z8 Q, V
  8.   <!--脚本开始-->% U8 g" X" B% F3 R3 {) G
  9.   <script language="javascript" type="">3 q/ a$ i9 W# E1 ]0 {
  10. function countDown(secs){
    " p; l; H; K/ ^
  11. tiao.innerText=secs;
    7 F! M: r' B3 p6 B
  12. if(--secs>0)
    5 F, J% [( k+ l+ X  Z. j0 C/ O
  13.   setTimeout("countDown("+secs+")",1000);
    * @) m% t+ h5 J) d- M( e% U
  14. }
    ! ~$ m5 C- h8 R$ k
  15. countDown(3);
    # s% Y1 a- ?+ {* D, @/ Z& X( y. z
  16. </script>
    2 K- b) v3 L- R- n2 W7 {
  17.   <!--脚本结束-->4 K3 g4 O1 O5 m8 e
  18. </head>
复制代码
例6:
* _$ P# ?8 S' P0 n
  1. <head>
    ; q- O6 o& R5 f; T! i( h" V
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    8 [7 e  [  N) u2 w3 s4 N1 }
  3. </head>
复制代码
例7:
. ?/ C9 C( z+ M9 U) B
  1. <script language="javascript" type="text/javascript">
    + n% `( A& N* b3 s. x# z
  2. setTimeout("window.location.href='b.html'", 2000);
    + ]0 c# B! l8 n' m/ S
  3. //下面两个都可以用5 M/ W7 u. ?4 e. q! [3 s
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    & u# g& t1 C' O: ?, i. O2 J
  5. //setTimeout("window.location='b.html'", 2000);
    3 m  T8 X$ `" x6 X  j: t
  6. </script>
复制代码
例8:
4 b% `* S* A# ~  V
  1. <span id="totalSecond">2</span>
    8 I$ m' T$ b5 m# x
  2. <script language="javascript" type="text/javascript">9 o7 }! }  m. R- n) Q5 p3 b
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;# \+ n" J; d6 r# e  R
  4. if(isNaN(second)){
      K) s& s  v; Z
  5.   //……不是数字的处理方法
    2 W+ N/ z* z4 F0 z* w- {7 r
  6. }else{$ s1 R, ~, S% `' D( J/ e
  7.   setInterval(function(){
    5 M8 N! J* T2 h! v* Q
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    ' T" `" V: r) R: ?! u# o/ [
  9.    if (second <= 0) {
    $ C4 L+ K$ [+ \4 N( ?6 U
  10.     window.location = 'b.html';* S3 M* C: P2 b- u9 ^
  11.    }! D% O+ A9 g1 B& p- F; s* w
  12.   }, 1000);
    1 [; m( Y3 L5 u- a2 h5 T8 s9 h, a
  13. }
    4 V- d, ?4 [) s& Q2 A
  14. </script>
复制代码

6 _3 S/ K% T# A2 y; E5 k4 O- `3 v( x  ~* H, z; p

0 l# z7 T9 M# W$ N5 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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