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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 7 h6 o: l) T" [% }5 [; b  b
  1. <script>
    ) L1 A( Z1 o5 A
  2. //定时器 异步运行 5 o/ ?. D5 j6 z  G, f
  3. function hello(){ # O' _! T9 h7 u! L5 ~& K
  4. alert("hello");
    ) l: m/ a4 J* m$ k; G. v9 J
  5. } * @/ t' M: K1 p: E6 G' V$ _! l
  6. //使用方法名字执行方法 6 \) a5 D7 s; P+ D; ]  ^# Z- m
  7. var t1 = window.setTimeout(hello,1000);
    ! o: y/ T& c2 w# O* e/ I
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 7 e" V" ^7 i4 R# c0 g3 F) _1 {
  9. window.clearTimeout(t1);//去掉定时器
    " x4 m0 y4 F2 c3 `. L7 b, {% [( `
  10. </script>
复制代码
2,重复执行的定时器
! |8 E, U, F5 S+ m
  1. <script>
    8 H& g  R2 u( T; U# u! U) P' X. m
  2. function hello(){ & q9 _/ p* C# F& M
  3. alert("hello");
    $ Z+ G2 }5 g+ n- {1 e9 V4 F
  4. }
    7 V/ J9 {( c! e( \) @
  5. //重复执行某个方法 9 m  ^# ]* i4 ~& g/ W
  6. var t1 = window.setInterval(hello,1000);
    . r8 j- P4 Q# v1 @6 O
  7. var t2 = window.setInterval("hello()",3000);
    : d- R" A) E" i" i9 m- B( I
  8. //去掉定时器的方法
    - g! d. i$ h* V* O
  9. window.clearInterval(t1); , J5 T. k5 Y. C4 u, k3 X
  10. </script>
复制代码
备注:
! C( A) l  b3 g! i! j; `: i( @  s( Z5 S0 X" J* R
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
  k# y4 S' r" C) S, P7 L2 V* v可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。0 n( ^+ u( g1 F# v4 q
1 o/ K8 i0 {% u2 k' w

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

1.倒计定时器:timename=setTimeout("function();",delaytime);7 J/ x$ l, T! U( S) ^" n$ F
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成5 N4 L. N4 B3 V: ?5 ]9 h/ S
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。, J6 C; \  ]' T7 Y3 f
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
6 r1 V9 p4 U$ ]比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,/ c5 r, ]0 o2 K6 M- y# b" Y
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
; B0 H9 X& M* b3 I比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
5 H" }7 N5 ~# P) c" w1 z7 YsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.( B- _3 H; c: Q, r
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象! ^. M1 ?3 `4 e) [: o
clearInterval(对象) 清除已设置的setInterval对象

略举两例。% m& n  y( W0 o, l* h6 T$ r3 S
例1.表单触发或加载时,逐字输出字符串


: |6 Q7 r1 o8 y! }& T. a
  1. <html>
    + A( i) z$ q( R" f/ Q5 J
  2. <head>
    - h! s+ u" Z. t2 y2 |  q
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 i" J3 s8 v9 Y
  4. <title>无标题文档</title>& U6 f0 K- a% v) I5 |  n: @
  5. <script language="JavaScript" type="text/javascript">' `% o& }: B6 w' z) I7 v
  6. var str = "这个是测试用的范例文字";$ U( @* b' ]6 D: o) x$ W
  7. var seq = 0;
    ) x! F5 Q4 g0 y- Y( a1 s4 B
  8. var second=1000; //间隔时间1秒钟0 k/ X3 @3 ^. ?% Z+ p
  9. function scroll() {
    & d, d2 f8 c9 D" i
  10. msg = str.substring(0, seq+1);
    7 z5 u* k/ E0 u- w; v6 h
  11. document.getElementByIdx_x_x('word').innerHTML = msg;, m/ ?! z/ N2 o/ H! z/ J% b& ~) B
  12. seq++;6 |" I* Z( t, d! J
  13. if (seq >= str.length) seq = 0;
    , R( V, x% o, d3 K$ K* H% c! M4 Q; b
  14. }8 U1 G% M0 j  p" v7 K
  15. </script>
    ! ]  f, v4 ]6 P( Z, f: l
  16. </head>
    ' j: S' C* J' k6 d, B! E" t7 D
  17. <body onload="setInterval('scroll()',second)">; N) b+ T4 C$ a- @3 Q0 Z
  18. <div id="word"></div><br/><br/>$ W4 e3 T  h9 D, D' g
  19. </body>
    3 A: y3 ^/ ^6 t* i8 a5 Z. R
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。( D6 @& x7 e& s, D4 \; W' X
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    1 s6 E9 [4 E+ I  |8 [$ ]* G
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    " ?. M! A1 D' U- W( h' v  Q4 E
  3. <head>
    ' g6 O3 V* A0 O* @/ o" k: @$ l% _. h
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ' `! S; g0 R" s; J
  5. <title>无标题文档</title>4 O1 h, T% T2 v( F$ R3 F4 q
  6. <script language="JavaScript" type="text/javascript">
      w+ q, N) B& y6 N* [6 @& T
  7. var second=5000; //间隔时间5秒钟  L, \2 n5 m' P( z* [0 m. u' D
  8. var c=0;5 E$ S% J1 S* C
  9. function scroll() {
    9 @0 f; M& `: g6 ]
  10. c++;- x, v5 M7 p8 C7 c
  11. if ("b" == document.activeElement.id) {
    " U% [7 J" E. y' ?+ D
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    : N( E3 b) H% O/ c* `6 _0 v
  13. if(document.getElementByIdx_x_x('b').value!=""){
    ) e/ \/ j* T( E* _
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";' W, s0 D1 `9 ^! W: Y
  15. }3 C% K8 [: G9 D4 v; x
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    6 H, c4 P0 u$ i& V1 Y- {3 d. ?. [, h+ C
  17. }9 Q! k3 t3 \/ p1 N/ a4 O5 f
  18. }- V. X. `9 ?* p  e5 m/ }6 @
  19. </script>! i& f8 M( J0 [+ a5 J
  20. </head>( A/ W. N) m: F8 g
  21. <body>6 Z! F4 T/ h; x1 V3 ^2 H
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    : v2 U4 d9 p9 i" U" A, y
  23. <div id="word"></div><br/><br/>
    , M* I. C/ n, w$ ?* Z
  24. </body>1 a$ \& S: m3 q! r& u* [
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
6 L4 Y$ s0 {0 ^- @2 N
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    * S- C$ S7 |) E4 i7 K; U* ]+ k
  2. <head>1 A- ~* ?% Z- o6 \+ H0 M* H" r
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />3 h+ G) _* Z8 D; D& H
  4. <script language="javascript">6 @- w0 E4 z1 G) [
  5. function count() {/ F! n/ t, D8 \7 o$ c
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ; m) X3 y  d* ~& m# J( u6 F3 F, k
  7. setTimeout("alert('十秒钟到!')",10000). f0 M  R1 L1 Z, {' ~8 X) ]5 i
  8. }0 ^* k$ D/ `: |- C8 s
  9. </script>
    ; v+ l& R/ N' z4 f9 Y* I* I' \
  10. <body>
    - c5 C) b+ k7 O3 h* }- s0 z  Q
  11. <div id="m"></div>
    0 `! |7 i' Q  ~1 `
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    - R6 u  H$ Q$ p# L" D
  13. </body>
    3 M7 _! `9 d% L# G$ x9 d$ o
  14. </html>
复制代码
例4:倒计时定时跳转1 B4 n* {$ K) Q  P
  1. <html>
    # s6 Z( v4 h, Y5 E2 j( Q9 L' z! U
  2. <head>
    + x1 V! Q. r, O6 v. n$ b
  3.   <base href="<%=basePath%>">8 f. y6 o3 e' X8 M4 ?" i% g
  4.   <title>My JSP 'ds04.jsp' starting page</title>- u+ ?7 ?" V0 J9 u& G
  5.   <span id="tiao">3</span>
    ) K( ~/ B/ b$ p& q. w" a. Y6 k) {$ |+ |- S
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……1 I1 p+ `, o" P0 x# @
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>/ m; L4 r7 H; }5 g8 F- u6 P% P
  8.   <!--脚本开始-->1 \- q: i& F3 t2 }- n5 Y+ _
  9.   <script language="javascript" type="">4 w. w$ A, j2 V  F' Z) F* d, f5 i2 L
  10. function countDown(secs){5 R5 w% H' d4 Q" [7 w
  11. tiao.innerText=secs;3 \7 \; @8 K5 i' j4 W) Y8 n! p
  12. if(--secs>0)
    ; {$ s0 K, U3 V  x
  13.   setTimeout("countDown("+secs+")",1000);2 t/ Y. A" W! f4 L8 w/ g9 Z
  14. }
    6 Z# d3 }" v; }: s
  15. countDown(3);6 w8 J: V+ T& l4 A" H6 ]
  16. </script>, ~0 c& {* Y# u' w" X4 I( d
  17.   <!--脚本结束-->
    6 Y  _0 Q+ q) B9 Y) v( w2 e- f6 O" B
  18. </head>
复制代码
例6:# H  T( ~8 _- R! j' U7 \( `9 }! d
  1. <head>
    / f2 g. Y- U3 w# t5 h+ c
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ! w! H+ d* Z6 y1 `% ~  p% I2 V
  3. </head>
复制代码
例7:, C9 U5 l" ~/ G* S7 x
  1. <script language="javascript" type="text/javascript">/ l4 }' E8 d. N1 [7 G, X7 F
  2. setTimeout("window.location.href='b.html'", 2000);
    6 Z: P: I3 n! G  j9 x% h7 {
  3. //下面两个都可以用) C* h9 U2 T% {0 F! V+ C0 Z
  4. //setTimeout("javascript:location.href='b.html'", 2000);  C- U9 D5 r& ^, a
  5. //setTimeout("window.location='b.html'", 2000);* |  H$ f: ^6 I
  6. </script>
复制代码
例8:
4 m& y* Z! M9 o0 M3 o
  1. <span id="totalSecond">2</span>  L/ @* |, X- x& L% V7 ?
  2. <script language="javascript" type="text/javascript"># }' I, b' _0 a) }$ a' ]1 e
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ) Z6 T& w% }, V
  4. if(isNaN(second)){# w( G2 N. p9 l. a# J
  5.   //……不是数字的处理方法
    . J' Z! B& K5 [% o
  6. }else{) D; E) j' m& s8 f; d
  7.   setInterval(function(){
    . \. k) W% j$ E+ s. N1 l
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;/ k2 e" l6 c. S: O: U6 G- a% ?
  9.    if (second <= 0) {
    + H8 h; l; Y0 U: D4 O2 y* W  h/ Y
  10.     window.location = 'b.html';7 X+ N% Q" F) [, J: U- A; |
  11.    }
    3 ]8 [2 x) x8 t; v9 J0 w
  12.   }, 1000);4 o1 w2 o) j. D. W
  13. } 2 ~( P# T; c- a% y% g5 i( `! p
  14. </script>
复制代码

, t, z- X9 c( r9 K
  _: j, j  w* m2 e$ Z& E9 b+ t) P9 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-22 10:04 , Processed in 0.051854 second(s), 19 queries .

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