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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器 . M+ s$ z0 }6 a. k$ _/ p; N: G' ]( }
  1. <script>
    4 ~& b6 t3 j# D8 W4 _0 Y3 @2 v6 E* I
  2. //定时器 异步运行 : w8 v5 \# k+ g) i
  3. function hello(){
    9 ~; U9 `& e& F* j0 g
  4. alert("hello"); ' }: Q7 d# ?4 }7 s7 ]4 K
  5. }
    ; B$ F1 N$ {. z1 d! d, X" S
  6. //使用方法名字执行方法 $ A) B. w; g% S' F  n
  7. var t1 = window.setTimeout(hello,1000); 6 C8 q! W5 ~! k3 v8 S
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    : ?9 i4 R5 G8 Q
  9. window.clearTimeout(t1);//去掉定时器 # i0 H. `. H; H
  10. </script>
复制代码
2,重复执行的定时器
+ }" ?9 G1 i/ y- ~- ?
  1. <script>
    : t+ B! _5 B- V* S7 u
  2. function hello(){
    ' E. r( T- s! e! G5 V( l: P
  3. alert("hello");
    ; C$ E* N: b; Q: `5 k
  4. } ! t' d' z  L. \
  5. //重复执行某个方法 7 }4 G2 Z9 g3 b/ n+ X
  6. var t1 = window.setInterval(hello,1000); 8 G3 K. x8 r$ N4 c
  7. var t2 = window.setInterval("hello()",3000);
    , R  v& c* e$ R1 L; j! g7 K
  8. //去掉定时器的方法 & H4 |# v  L" D% U: a, m5 B
  9. window.clearInterval(t1);
    5 r/ X3 a5 w+ F+ Q: D0 a/ t" X
  10. </script>
复制代码
备注: ; z, y5 W& S9 C7 {

$ h" J1 E2 C& ]- q+ ?& |0 v如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: ! D1 W2 d. I: u+ U' F; P$ z: H
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
$ S% E2 H5 Q/ C+ C+ i! B" u: U. ?" p2 t* I6 T

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

1.倒计定时器:timename=setTimeout("function();",delaytime);* t3 P+ J4 Y8 {9 m2 ?2 J6 X: t& i
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
- J  m  I& z, [“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。" g* V, q. J. C% i' M, n* B
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
. U: i4 n( D5 {0 k- u比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
; H8 S1 l" |3 H则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
5 t9 f& x/ v% _5 e比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。  ?) Z5 P& M7 O3 K# W
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.# |0 H( |. }: E8 m1 y- {) Q
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象5 F' G  l$ K6 b- _* Q* ^4 l: k
clearInterval(对象) 清除已设置的setInterval对象

略举两例。' p( e" `- t5 ?' M! i
例1.表单触发或加载时,逐字输出字符串


, N* z% ^- e! Q# l" f+ ]+ I
  1. <html>
    7 M) n' ?. M. Q! g# K8 l& w: R% r% _* M
  2. <head>, i) i! K( S; R0 f1 [- Q  h
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
      i% f2 \+ k# L* l5 a& v
  4. <title>无标题文档</title>2 z8 B% V8 [* F+ C
  5. <script language="JavaScript" type="text/javascript">" S5 e: w" ^( U* _. g1 X! R9 u
  6. var str = "这个是测试用的范例文字";
    5 R& o1 O' t  T2 n
  7. var seq = 0;+ I5 c6 w3 Q/ ~* ]0 |1 q- e; F
  8. var second=1000; //间隔时间1秒钟6 A, u4 @, y+ S1 I' [
  9. function scroll() {
    ' |3 M% p9 n6 {% c5 i0 A" ~
  10. msg = str.substring(0, seq+1);! J7 M: i; }% \0 B
  11. document.getElementByIdx_x_x('word').innerHTML = msg;* e% z9 x! v5 z& d( b) Z- \
  12. seq++;
    , |4 b* B4 ~# f( Z- o
  13. if (seq >= str.length) seq = 0;
      m. Q$ `! L1 K: p
  14. }
    , s; R' `- x3 B. M( C1 B
  15. </script>
    " V. s4 x+ X' [- T) y8 O
  16. </head>
    6 K. S9 R- L6 V$ f
  17. <body onload="setInterval('scroll()',second)">8 m! |/ x! O& h
  18. <div id="word"></div><br/><br/>
    0 x( t1 t- Z" Q0 f# m
  19. </body>3 S! j  E3 O$ [- v9 o& z
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。4 V# I$ I+ Y; T, S% U5 U
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4 Y, ]; l, V  l( n4 J2 u( S4 v
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    - M# `) \( ?/ a
  3. <head>7 e# X* Z6 w, o# p3 }# }
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />/ W- C1 A/ c4 F! a7 a/ G* S# U4 X
  5. <title>无标题文档</title>
    ! w: A: b) V" c! d" d  D) L
  6. <script language="JavaScript" type="text/javascript">
    : U" B5 O0 G0 g6 t# ]  z3 q9 j. F( {
  7. var second=5000; //间隔时间5秒钟/ v# e4 C! F( F( x& [3 E5 f
  8. var c=0;% ^9 X. |1 y$ ]6 d# J0 v, s4 ]
  9. function scroll() {. E* F, v6 b6 c
  10. c++;$ |* L3 S  i5 M, v
  11. if ("b" == document.activeElement.id) {
    6 P6 w/ O2 x0 P8 G
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    ' h: k8 w& H' r( R" O9 `3 y* k) w- w
  13. if(document.getElementByIdx_x_x('b').value!=""){9 E$ H4 f6 b% ^
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";  f" l4 S- r" W5 x, _
  15. }3 N* Q3 C5 ^9 n2 W
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    5 `* D: e4 p# u. j2 D  m4 z
  17. }
    ! R$ c) E* n& Z" ^& V' I6 G
  18. }9 f9 |% H  m2 Q4 o" }$ O+ `" X1 k
  19. </script>( K2 Y0 |! }: \8 R8 q. d
  20. </head>  a+ ~* z: a1 j& X; |
  21. <body>8 u  R2 p1 C2 y  \
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    0 f4 `6 A+ Z1 M0 K  F( J
  23. <div id="word"></div><br/><br/>
    $ R5 ]% q5 V/ S8 G
  24. </body>
    8 j' [/ M! J& w5 d5 t, _
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
$ n& E0 \1 \8 ^! o/ O/ E
  1. <html xmlns="http://www.w3.org/1999/xhtml">6 k$ F" M! R) N( E1 L  `. v
  2. <head>
    ( h  [7 h, O& {
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 k" i* e! V$ g. D/ C
  4. <script language="javascript">& p' T" z9 S# g, K" K7 C3 k
  5. function count() {
    ) ^2 B& n/ F  t: t" W  [  H1 g
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ' y4 ?4 S( }. X5 i. L
  7. setTimeout("alert('十秒钟到!')",10000)
    7 C4 {) R4 z6 T
  8. }% f. i! C( X, Z4 t9 {
  9. </script>9 }: N( Z. v" }5 c
  10. <body>
    5 T7 t. Y- o/ w" ]8 p' `2 C
  11. <div id="m"></div>* b$ z  u3 y% H! _* \2 g5 y; w8 p# E
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    * Z0 L7 Z) c: E( |
  13. </body>$ f  U# E/ z) {* I; w4 S6 p6 N
  14. </html>
复制代码
例4:倒计时定时跳转  v. i* P% `/ g" W7 a) s: v
  1. <html>
    . l( l0 R) r5 Y0 }4 w6 s
  2. <head>, `0 [1 ^* R8 N" d7 m, K
  3.   <base href="<%=basePath%>">
    , U( @" `, n6 r' g# t1 t
  4.   <title>My JSP 'ds04.jsp' starting page</title>( U% B6 K" |1 Y; D
  5.   <span id="tiao">3</span>% M, a5 ^8 ?" V" i. t3 |+ M# T* M
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……8 q: I( T  K/ @, W2 y2 T; b, g
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ! F( W9 w" z2 L# e
  8.   <!--脚本开始-->( i: w! |, Z& J( A8 X6 n/ l! h
  9.   <script language="javascript" type="">
    3 z% G1 J! W: \( F
  10. function countDown(secs){
    + R9 Z1 L/ s4 Q6 G$ S, s
  11. tiao.innerText=secs;
    , o2 i4 L3 Y( o7 c7 B5 y: S
  12. if(--secs>0)
    0 n/ ^4 F6 V  F3 W; P
  13.   setTimeout("countDown("+secs+")",1000);& z5 }& V; n& o/ _( s9 }
  14. }$ H( N$ y& y3 ?" @. n0 r
  15. countDown(3);0 V$ |8 e; y0 z$ g9 [% b1 ?* Q
  16. </script>0 v# x; I" R* t, x" G3 ^
  17.   <!--脚本结束-->
    * y0 B  }- i: ^: i7 m. Z4 T% k
  18. </head>
复制代码
例6:
( g: ]1 J/ w& _
  1. <head> * s5 X2 b6 N6 }% H
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> % H4 J0 n: w$ M
  3. </head>
复制代码
例7:
( }% f" S( y6 J7 |: N8 ~
  1. <script language="javascript" type="text/javascript">
    - ~% x1 [; K+ f# f! d9 M% p; m7 W
  2. setTimeout("window.location.href='b.html'", 2000);
    - H5 m$ A: ]& X* H
  3. //下面两个都可以用: t' F7 a) H2 t$ {6 C: Y
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ( ?& x& ?4 W& f2 i) n5 w
  5. //setTimeout("window.location='b.html'", 2000);
    7 ]8 B* E* c& R: H
  6. </script>
复制代码
例8:2 g  a; T; W! g# ]0 j  p% T
  1. <span id="totalSecond">2</span>
    0 f. G- z* h- W/ F
  2. <script language="javascript" type="text/javascript">
    9 f0 P- E) U  b% I
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;: |: a2 k' T# W7 w1 ^
  4. if(isNaN(second)){0 n' m8 m3 @1 E5 Q% `4 ^
  5.   //……不是数字的处理方法' X$ A1 y& [) o- F) |; e
  6. }else{; o% r! e7 n4 j* S. n6 \1 }
  7.   setInterval(function(){+ y0 ]2 D" Z$ V! Q
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;# Y& u  ]7 ~& {! O+ X
  9.    if (second <= 0) {9 J, F; ?& X% j- v/ g0 d( S! ^
  10.     window.location = 'b.html';
    9 i; H( _  F, O* I8 F. L
  11.    }3 d$ y  A) M% W. y" U; r
  12.   }, 1000);
    ! m* o2 Z, L/ _8 N, f
  13. }   `* ]% L  D2 T( ?* }) Q
  14. </script>
复制代码

9 x9 e; G/ e, c9 l) x# ^* [3 T- j0 F9 Q8 u

8 m' n! }4 Y, h5 ^& m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-1 17:32 , Processed in 0.143030 second(s), 20 queries .

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