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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 3 S* H% d$ ?6 o7 P$ s; j
  1. <script> " z% G' y. A( n% x" T
  2. //定时器 异步运行 2 n) G0 P* _6 {/ ~- M) B2 T( `- X6 L
  3. function hello(){ 8 {% p3 ], r! G: z* S
  4. alert("hello");
    ' k/ P0 i+ k" `* u9 k
  5. } % |( Z! H( y2 s: b
  6. //使用方法名字执行方法 0 j9 D2 p& N( z; C' I5 C' m
  7. var t1 = window.setTimeout(hello,1000);
    + Q3 d8 E) A4 Y# m% N: l/ l7 Y" p
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 . Q( M  }4 d3 U0 M
  9. window.clearTimeout(t1);//去掉定时器
    , i4 u4 R5 y( K# N. T) O
  10. </script>
复制代码
2,重复执行的定时器 # Y9 G9 f$ X7 W/ r4 z0 E! [' X
  1. <script>   n+ ?5 h, L* r& _8 l- k, N
  2. function hello(){
    # O% Y  S5 M. b) L; ]9 F: J+ \% m# J6 M
  3. alert("hello"); , }9 @/ Z. M6 C. j
  4. } 3 ~* @/ b2 ]; T5 D' w4 ]4 G2 S
  5. //重复执行某个方法 , A. a5 K( `5 @7 D; E
  6. var t1 = window.setInterval(hello,1000);
    0 ?5 A4 h1 q4 d. x: g$ X) \$ a
  7. var t2 = window.setInterval("hello()",3000); 0 k) w0 y1 ?5 l+ `4 l
  8. //去掉定时器的方法 . r. R4 A0 C: ?8 v* t
  9. window.clearInterval(t1);
    2 P. ?+ ~+ a! p& ?
  10. </script>
复制代码
备注:
" V  S4 }4 k: N7 T8 B8 C. K0 f+ d+ F) w% c- f  h/ b9 y
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: ! K5 }9 k# ~/ i  k
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
, }: L' f' F; Z/ K: v# q
/ S+ B4 l) B! R) _7 R. t6 K6 x# i

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

1.倒计定时器:timename=setTimeout("function();",delaytime);. R& v; m3 x% G/ g7 b7 E) S8 h
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成4 @. G' q/ p9 f$ J
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
8 Q  J0 c  Y- F5 h0 }  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。6 D* @  @* W7 _7 G) n  e0 @) K
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
% d/ R' G% ?* K- D则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。2 n" Y: i/ I  M& B- M0 h( K, L
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。1 J3 S" ]1 A, I) \
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.- l$ L' s5 Z" d, H
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象/ ]/ O% M9 N& [" x5 E, E
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
: a' T  M4 `5 g  Q3 N例1.表单触发或加载时,逐字输出字符串

2 D% p% W1 W3 |9 G7 E
  1. <html>2 M. r$ n" j- y, c4 q
  2. <head>
    ! ^6 j% b; E& k9 t2 l1 j- I
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 f; T* h: w! v5 v7 y
  4. <title>无标题文档</title>
    ! h+ @) ]# x3 d5 ?& u
  5. <script language="JavaScript" type="text/javascript">
    . J% O7 M4 i/ y+ ?9 _
  6. var str = "这个是测试用的范例文字";% }3 U. [2 q9 ^9 j, F' L* Y9 Z
  7. var seq = 0;1 X/ s% i: t0 A) E6 F. [  V! L
  8. var second=1000; //间隔时间1秒钟! A( j! Y& l8 y7 _+ s4 y( g4 |
  9. function scroll() {
    * U6 F7 M3 H. n: d3 `6 p# t/ y2 H
  10. msg = str.substring(0, seq+1);3 N+ a' o! U. o2 w
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    * \7 R# J( A) p' P  O. u
  12. seq++;
    7 L  T. D# P0 _  ?  w
  13. if (seq >= str.length) seq = 0;
    # V: f  r0 s# j& y- |" E  T) G& V  L  }
  14. }
    # O! n' P! I* Y
  15. </script>! V  \4 r$ s5 h/ }6 \/ k
  16. </head>- @/ j! F/ M# S' {$ L
  17. <body onload="setInterval('scroll()',second)">$ @0 A5 e" J* r! t4 t
  18. <div id="word"></div><br/><br/>) M6 S$ R. Y# A; G- r
  19. </body>
      g1 |1 A6 f" Q& h7 ]' H
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
0 X, o6 Y7 M0 \6 P3 @9 P
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">9 J" k7 J# Q- x; q$ Y8 H
  2. <html xmlns="http://www.w3.org/1999/xhtml">& C+ s0 y& |. ~
  3. <head>
    , |3 G: ]5 m$ [' i/ M
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    7 a% V0 T7 k6 u& c8 V" J( y2 t
  5. <title>无标题文档</title>
    7 T7 k3 C( h% o) @7 U
  6. <script language="JavaScript" type="text/javascript">
    ; m/ u' B, {$ S: A
  7. var second=5000; //间隔时间5秒钟
    ) d. V" v* ?6 ^0 b  V
  8. var c=0;
    " M$ k; G9 H6 w' p' ]* m
  9. function scroll() {
    + r$ w1 z9 V4 D$ p( W& ~4 x  F
  10. c++;, r( i* N2 G! N, D$ q
  11. if ("b" == document.activeElement.id) {
    8 {2 `% q! O) u: I. ]+ A& V
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    , ?' d0 n1 P' v8 a8 H
  13. if(document.getElementByIdx_x_x('b').value!=""){
    9 ]+ k+ ~# U$ D* d1 p* o% H+ A
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    9 B/ }! C, m* y. |4 T
  15. }
    ) n4 W/ ^* F6 c. J5 f
  16. document.getElementByIdx_x_x('word').innerHTML = str;+ n% e9 x% i+ S
  17. }; W" E, P( Q( R6 V
  18. }$ X; ?1 i2 ~7 K- `
  19. </script># f  j. W. d2 G- A" w
  20. </head>+ `& T% v) W  v* @2 O1 r+ T$ ]
  21. <body>; W9 t* D5 U; H# W
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    1 @( ~4 {$ S5 Y
  23. <div id="word"></div><br/><br/>
    9 ~6 c* S3 D9 B
  24. </body>
    & j) Y- e" K& F4 Y1 t- G
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。- D, d3 ^" j3 B9 N
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    $ s" D6 O, ]$ F/ @
  2. <head>2 |+ Y: B2 E& T$ |5 e3 T
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />" t4 ~+ u( X7 j  Y8 {! h" x
  4. <script language="javascript">
    0 x0 a" u- o8 c* E4 X# H
  5. function count() {
    + ?1 d( r$ |6 n# V9 b& o
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";6 |2 Z' o5 w( C: n4 M% v8 h
  7. setTimeout("alert('十秒钟到!')",10000)
    ) D$ ]: |1 J; I5 \
  8. }& n/ Q, n" }0 Y$ x4 U: n$ E* m8 V
  9. </script>
    6 C3 |- O) o) P
  10. <body>
    2 A$ Y; {& I2 E9 w- d- Q9 _
  11. <div id="m"></div>" y7 h7 p, C5 _5 C5 N6 x6 y) y! _
  12. <input TYPE="button" value=" 计时开始" onclick="count()">. O' C) L* w# |* o- C9 x8 P1 z/ n& |
  13. </body>% X/ W  c: P5 c3 J- b! T/ C
  14. </html>
复制代码
例4:倒计时定时跳转9 V9 y/ n$ J2 l( y
  1. <html>6 w* b% y# d1 \) Z1 r3 M6 q
  2. <head>6 c2 T# F; n1 e' m: T( S
  3.   <base href="<%=basePath%>">9 J, c0 H4 R' B
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    * h* w# o9 I" o% H  P
  5.   <span id="tiao">3</span>" c2 F! ?6 K7 }) X
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……% a1 w. S" A, y& S, f" H; z& T1 i
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    8 V! b7 S" J' t* p
  8.   <!--脚本开始-->) H+ B# a5 [! Z' k. \! i
  9.   <script language="javascript" type="">, U3 d2 q5 x1 `3 m
  10. function countDown(secs){
    1 C+ p2 F' R- v! i4 M
  11. tiao.innerText=secs;9 K9 m' u6 ^1 c2 K8 n. `4 M
  12. if(--secs>0)! K0 A& M$ U6 F! [% t! a2 K7 S+ L- `
  13.   setTimeout("countDown("+secs+")",1000);3 \+ o& Q# R) c+ b! Y* l" l
  14. }/ s7 O/ l# B1 \. f( W4 d- E9 o# z
  15. countDown(3);* o. O1 k7 C9 |& j: ?. y
  16. </script>
    : [# d7 z' d1 ~
  17.   <!--脚本结束-->
    6 v- M$ s$ l- j, w* s* H/ _: `
  18. </head>
复制代码
例6:" I2 |. r+ W  f4 T- _
  1. <head>
    ' L, E6 h" L. ?$ B* m" I4 N; |
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    " X8 \' r7 |$ `5 s" `8 C
  3. </head>
复制代码
例7:  o5 _5 `5 k3 z5 d( y3 J: i
  1. <script language="javascript" type="text/javascript">
      J% n' z; {# }* v! |% }- j' d
  2. setTimeout("window.location.href='b.html'", 2000);. }7 b& Q) w( v& J% ^
  3. //下面两个都可以用0 z) c$ @/ M# ?. Z( i9 }
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ' S( p4 n; V- Y4 v
  5. //setTimeout("window.location='b.html'", 2000);
    ! m, i9 @3 a4 \9 M2 q) g3 x
  6. </script>
复制代码
例8:
( c: z* |+ q3 ^8 {
  1. <span id="totalSecond">2</span>
    9 G" ^7 R8 |5 m. H( w0 p
  2. <script language="javascript" type="text/javascript">  k- Z- `2 ^9 E/ M. u& }  Q
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    + Z$ h" p- }9 W# z
  4. if(isNaN(second)){9 A! y& s; ?$ C7 x
  5.   //……不是数字的处理方法
    0 c) B) [% q$ A: U2 t3 ?& L
  6. }else{0 e/ L; [# [# j3 [. k' I
  7.   setInterval(function(){
    . ^  H5 [" c; `
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;9 O5 b, x" x# Z$ k, k+ D
  9.    if (second <= 0) {6 C  z. R6 B. B& q
  10.     window.location = 'b.html';- v- M5 V. I, f4 N. U
  11.    }4 V: U  S8 N$ E- E: c, k) {1 u$ M, d
  12.   }, 1000);
    5 q, x7 `# e  u4 c
  13. } $ i5 q( b; D( s- Y. w+ {% X
  14. </script>
复制代码

0 @9 ]# i! ~4 z: R# Y) G4 v
# l/ O3 I, z/ ~/ u
" @4 h4 e6 T/ X3 a' T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 18:22 , Processed in 0.110258 second(s), 19 queries .

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