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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
/ h, J& T7 [$ X5 k& d7 q# p  ?  {1 o
  1. <script> ! T0 S$ e+ O3 `4 A+ \  [9 N
  2. //定时器 异步运行
    2 i# {2 Q$ x# Y7 H
  3. function hello(){ * s' j/ D3 N; R
  4. alert("hello");
    9 L; M5 T& D5 N$ [4 m9 N
  5. }
    * @4 {" H7 o; D) q2 A7 w
  6. //使用方法名字执行方法
    " _, e- E# z3 V  H* F5 i3 n0 S
  7. var t1 = window.setTimeout(hello,1000); * n4 {& L% S2 h8 T: x
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 8 o: l# }  U* a* f) O4 i/ J8 E/ Q
  9. window.clearTimeout(t1);//去掉定时器 . i# Z0 T8 @. Z4 f8 E8 `" J  O0 p
  10. </script>
复制代码
2,重复执行的定时器 4 F& o! H  v* u( J% @
  1. <script>
    $ \+ I/ @. `3 ?7 q' i  ~8 [
  2. function hello(){ 9 I* K& L1 e8 r+ e* k
  3. alert("hello"); % h" O& J4 c9 j) r" s, c* I8 P
  4. }
    ) L' F, \/ t/ V2 Y
  5. //重复执行某个方法
    ) c. f8 a. k* X3 a# s
  6. var t1 = window.setInterval(hello,1000);
    5 {7 g. D9 j4 x- s" g
  7. var t2 = window.setInterval("hello()",3000);
    . b4 S( l6 o- P! x5 j6 S8 v
  8. //去掉定时器的方法   Z- |# P! G- ]3 ~6 n5 `
  9. window.clearInterval(t1); - l# q" W5 p8 a; r( o, r( W
  10. </script>
复制代码
备注:
9 N( \' Z5 X1 a" ^" J; f$ V3 ^/ l- S& i6 S! D; }
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 2 D# S# N& t$ `( M
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。# D& q' _6 B3 X; c8 h$ C
6 S9 W9 K+ Q. h1 t5 b- B

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

1.倒计定时器:timename=setTimeout("function();",delaytime);! r9 {/ \" U% Q9 }  _
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
9 d; i7 J0 d/ }- h# {5 c3 Q5 e“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。- n) q1 m0 G! N" X
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
% b  x* h+ i! M" S/ I比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
+ x/ @# O3 h. I1 d则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
7 Q* z/ s6 b8 b8 K  M0 g$ Y比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。! W. k% l( r4 [$ @/ e
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
: F: B7 g! j5 j* l. \/ wsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象1 @0 \" k; p. R% c, T9 g# F9 L
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
! R/ ?; h# Y% ]例1.表单触发或加载时,逐字输出字符串

. n* o! J1 i8 k( K1 `
  1. <html>& [# s/ p" C1 d) z- M) h
  2. <head>. Q" f# c& O: ~# r$ r
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    " u! z! C$ t. h2 y
  4. <title>无标题文档</title>& X0 ^3 y6 S$ t* E: G' |
  5. <script language="JavaScript" type="text/javascript">' M6 c" h' R1 B4 g
  6. var str = "这个是测试用的范例文字";& V8 k) w: u/ }  {5 M3 d
  7. var seq = 0;
    2 y: S1 n! A0 @
  8. var second=1000; //间隔时间1秒钟% b: f3 V* w- B, N0 M, U# a- u5 G" l
  9. function scroll() {
    5 M, g) D, m' w! L' ]
  10. msg = str.substring(0, seq+1);
      P0 ^+ h- z' Y
  11. document.getElementByIdx_x_x('word').innerHTML = msg;) E( C; y6 s3 {: |8 f3 b7 d: \4 P, {
  12. seq++;1 U8 n7 l4 X  I( Q. r8 O5 d7 g
  13. if (seq >= str.length) seq = 0;6 s, ^0 }% K4 P" ?* @
  14. }/ S/ Z8 k* ?: S
  15. </script>6 i% v2 u) t! H, ?2 b% B$ \2 E  J
  16. </head>4 f6 L: G/ u& R) W* h! a  ~
  17. <body onload="setInterval('scroll()',second)">: L. ^' n' J2 k6 K7 ^2 s* u
  18. <div id="word"></div><br/><br/>* N; O6 {! e7 E/ N' V: Q$ F% N
  19. </body>
    % j" B$ W2 d7 Y. ^) l3 d; ^; W$ F1 l
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
+ |' w8 H# z. Y  s: C+ W" Y: a
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    $ Z' \) q8 O/ \( V& x& V( E" g
  2. <html xmlns="http://www.w3.org/1999/xhtml">' w, O/ e, j9 j+ M! _& O! K
  3. <head>/ v; }0 _. o( \6 V5 R! y! G
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    8 h) F2 d. a) w6 k! j' Z  s
  5. <title>无标题文档</title>
    * x% b8 l+ d, T' L( q. p
  6. <script language="JavaScript" type="text/javascript">8 K$ H* @9 _3 R/ X
  7. var second=5000; //间隔时间5秒钟
    . Y3 e8 Q) o- S4 r' B- \
  8. var c=0;" e# t% z+ E2 i" r- q0 d
  9. function scroll() {
    # Q# W1 l/ |5 d
  10. c++;) B/ A, o/ u$ ?  }$ V) S
  11. if ("b" == document.activeElement.id) {
    ' C% H8 F. {& h7 e( `1 \( {
  12. var str="定时检查第<b> "+c+" </b>次<br/>";, F7 }9 k/ |8 l) w% Z, F
  13. if(document.getElementByIdx_x_x('b').value!=""){3 u# g2 L$ F) \. v1 k
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    : Q9 C* o% u" S9 ^$ M
  15. }
    1 q. U* B& y1 _" m. Y
  16. document.getElementByIdx_x_x('word').innerHTML = str;* r3 _7 E" s5 I+ S; R/ ?5 S
  17. }
    " A3 G8 c1 |8 x; b2 P( X
  18. }
    $ j8 ]$ C" }6 X- e
  19. </script>* C, N) L" {. M5 Q/ X0 G
  20. </head>4 D! g$ f" J9 z: n8 M8 l* O
  21. <body>
    2 f  F* G- l6 W% x
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>, V3 x' X7 F7 q, s
  23. <div id="word"></div><br/><br/>% h. t) Q% J# x# A/ b/ G" ^" h; U
  24. </body>5 M3 g- E- a- O; y! y, \
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
. u7 D7 l$ h  a; H$ W  y& j
  1. <html xmlns="http://www.w3.org/1999/xhtml">1 w. ~8 p" m7 l, y6 U
  2. <head>: X  Y+ e1 f# |# Q3 I" y
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />* u& h1 s, J+ _7 y. B1 f: X$ C% X
  4. <script language="javascript">% B) X. D- D5 `$ ~( `( `5 s5 {2 H
  5. function count() {3 o2 y4 Y  V$ C9 b# x
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";9 C. h: \& J( @  U
  7. setTimeout("alert('十秒钟到!')",10000)
    + k! C9 N! V9 s  \5 M
  8. }
    0 J; J- a3 T2 W5 \' U( i/ Y5 v. C
  9. </script>( w9 T. c& b& _% l# ^, Q
  10. <body>/ F9 ?  I; m, K8 |
  11. <div id="m"></div>' j+ ?# L  \1 E6 Z6 G, F
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    3 G5 i! H# D$ S' a' x# p# n( v  ]
  13. </body>
    2 }% R* b8 \% |" [: X3 W7 U
  14. </html>
复制代码
例4:倒计时定时跳转& ~/ m- L9 t" b' K" S; C( U
  1. <html>, K7 F; ^# ~; h  V. k  W6 x. |
  2. <head>
    # y6 X2 q! F4 f+ C, ?- B, M; L
  3.   <base href="<%=basePath%>">" }8 q- K& \* W) l8 x! i
  4.   <title>My JSP 'ds04.jsp' starting page</title>( a$ m+ {. O) r4 x0 |8 B
  5.   <span id="tiao">3</span>: ~8 g# G# A4 N1 \, l  }: |
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……0 d" ~+ p. _/ q* q0 s. J4 ~
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>5 G' D' e) ^7 x; Z& d" N, j
  8.   <!--脚本开始-->9 R' X, N7 F5 _
  9.   <script language="javascript" type="">9 @# p1 D# [4 ~; C
  10. function countDown(secs){+ v9 W4 @5 ^' Q( H4 M3 i
  11. tiao.innerText=secs;: l. ?9 m6 {6 u" t, G4 T3 G& Y
  12. if(--secs>0)
    0 K0 O( E: Q- s/ O
  13.   setTimeout("countDown("+secs+")",1000);$ o6 G* H; D) I- z8 p
  14. }
    / z' c9 V! L6 k- m3 @( H
  15. countDown(3);
    1 z- X/ c4 V& `: m1 |
  16. </script>! m( I/ ?# X8 z2 ^% G% }- N
  17.   <!--脚本结束-->, ?/ j: b! \& R1 b7 [& H. ~
  18. </head>
复制代码
例6:
7 \. x9 u# L: s. {  K
  1. <head>
    7 w- @, x6 X8 n% A1 [4 o
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> / n# {& i% M9 e: F# S/ j7 Z
  3. </head>
复制代码
例7:
7 Z% k" v' `. i8 Q+ c8 U; B- X8 F3 _
  1. <script language="javascript" type="text/javascript">
    " X# |2 \# B4 T4 l) b  k
  2. setTimeout("window.location.href='b.html'", 2000);
      }% C" A' b/ e  Y, G% s* v' S6 m  I
  3. //下面两个都可以用
    1 T% L8 c5 K1 K. n  a  p
  4. //setTimeout("javascript:location.href='b.html'", 2000);! N9 ?9 D; F& e0 B( \" J; l  B
  5. //setTimeout("window.location='b.html'", 2000);% x+ L0 s, z) V8 j' [" U
  6. </script>
复制代码
例8:
! `8 }1 T/ T9 Q! ?0 S
  1. <span id="totalSecond">2</span>
    ; G  K0 V& W# c6 O
  2. <script language="javascript" type="text/javascript">
    - D& m- G3 b- ~: g8 ?- r! \3 m
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ! ]. C; s3 S$ x9 S4 d, Y9 X9 `
  4. if(isNaN(second)){  x8 Z7 W7 I7 B  d) S" m
  5.   //……不是数字的处理方法& v' L9 A* L& F4 P9 K. r. W
  6. }else{
    4 c8 N) O4 Y. u  {; ?
  7.   setInterval(function(){
    $ _( p# s" H- o2 u4 c
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    : L+ R8 Y8 u& q5 W3 x% D8 t
  9.    if (second <= 0) {2 m5 _% p" M8 j  M
  10.     window.location = 'b.html';
    ; v) x6 k9 H: F
  11.    }" U; Q: {! k& N! B. s
  12.   }, 1000);
    9 P* c0 z* L  X- I1 r" v
  13. }
    9 {2 D2 C( r# a5 V9 `
  14. </script>
复制代码

1 m6 G$ ]* e" Q( \
) f) f$ t1 l' o1 I# P+ r/ O9 B
5 b1 i' _; e* p& h+ T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:21 , Processed in 0.057029 second(s), 19 queries .

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