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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
; H  q6 v: W9 l7 T( v& O2 G8 r$ ?( V
  1. <script>
    3 L- K3 C) q) q" q' N
  2. //定时器 异步运行
    ! g% F4 Q$ j) ~; L4 U1 F
  3. function hello(){
    3 E- @7 y& ~+ I, H
  4. alert("hello");
    ' s/ V' B8 D) Q; z4 v* z
  5. }
    0 n! |1 e& ~3 c/ U
  6. //使用方法名字执行方法
    0 Y" _# j1 L% @2 h
  7. var t1 = window.setTimeout(hello,1000);
    # e1 b+ U2 c- U8 x$ ]
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 ; h' \' p; r1 y2 h; i$ S
  9. window.clearTimeout(t1);//去掉定时器
    / M# V+ f$ [& l) Q8 b4 ~  {6 |
  10. </script>
复制代码
2,重复执行的定时器 & n; B3 r  t! \% `: M
  1. <script>
    * l( L0 E; R9 q$ F- T( }
  2. function hello(){ + J4 x9 q2 y3 _! R
  3. alert("hello");
    & A$ ?. V: s, H. o6 j/ ]" r% M
  4. }
    4 Z8 H$ [& G) @8 E2 @
  5. //重复执行某个方法
    / I/ @/ Q8 \' P6 D% k, k; t
  6. var t1 = window.setInterval(hello,1000); $ |0 A$ G$ ]* {1 I7 r  P5 T: k
  7. var t2 = window.setInterval("hello()",3000); . C7 X  P& H  G6 c1 o# W6 N
  8. //去掉定时器的方法
    : \5 V7 Y4 a7 h
  9. window.clearInterval(t1); . h1 B" m# B- ~/ G8 _5 K; W" O; p
  10. </script>
复制代码
备注:
, T, c% b3 z) C) N( j
' Q4 ~5 ^) c+ p  o如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 7 I: M2 H6 h8 g7 u- k2 Q4 k' U+ o
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
- ~0 b: R4 A; C0 A0 v5 |2 Q' {3 V* E7 I

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
" v" b7 r0 l" s. G3 A0 L2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
$ E9 m5 k/ O+ d6 n4 i6 X; W“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
7 _) T$ |+ a2 d  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
; e- Z0 T9 n: I+ ~比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,1 t2 `0 B3 P/ {. ~" L. N1 I  u/ Q: l
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。. g! ~) l7 `9 L" o
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。- [, m* z2 O# f, \& Q) [) w
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.5 ^% X8 w  W% p8 ~' _9 o8 i
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象5 N4 d/ @' |2 F
clearInterval(对象) 清除已设置的setInterval对象

略举两例。% Q) E$ X4 b& u# v5 O6 N$ J. Q7 r( H/ l
例1.表单触发或加载时,逐字输出字符串

. E# o9 u  c- E( |6 S, @
  1. <html>
    % K; a7 \1 @7 a, }: e& d; A/ B
  2. <head>) ~- F7 r8 J! ^" y; ?
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    . c; P3 K; l2 r( }+ f0 p
  4. <title>无标题文档</title>; U; ?3 \3 P* k6 X
  5. <script language="JavaScript" type="text/javascript">
    7 @; p% I0 f4 u5 o: S
  6. var str = "这个是测试用的范例文字";
    ( d) _' {% U5 y- H& ?' c, a) Q
  7. var seq = 0;
    , t2 M" Y6 I$ ?8 d$ v
  8. var second=1000; //间隔时间1秒钟# _$ [9 x' o. @
  9. function scroll() {$ Y& o6 ~. F6 k6 H/ F+ x6 C
  10. msg = str.substring(0, seq+1);
    ' W) |$ Y: t8 d- h0 \8 h+ f4 E, Z: k
  11. document.getElementByIdx_x_x('word').innerHTML = msg;8 \6 P3 q6 I2 x) E, F+ k' m" e
  12. seq++;* F1 ~" Z$ K" m0 e3 k4 J/ g
  13. if (seq >= str.length) seq = 0;
    1 c, P; n( G. x
  14. }$ z# T5 C6 T! Y) O) C* L
  15. </script>
    / a, F3 }  e. ?$ l! T9 |
  16. </head>
    ) }4 y# ~1 h! u: u+ `9 g2 S
  17. <body onload="setInterval('scroll()',second)">
    # a- M$ j- Q# b4 z$ f1 ~
  18. <div id="word"></div><br/><br/>
    $ v) G  b7 [& D9 R3 M9 c" y  ~
  19. </body>
    0 U% a, b( C  Y3 b- C. ~* i: W) n1 D) b
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
! e& q2 g+ _5 D3 e9 ]3 j( h
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">: i( |- T8 N8 H) `) t! u7 a
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    8 ^! g% F( \* ?
  3. <head>
    2 i3 W7 W3 M* k, A
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />: Z! t# c! o/ P; `& y
  5. <title>无标题文档</title>" ?/ A2 D- p! ?8 J" P; W% N; o, b! b
  6. <script language="JavaScript" type="text/javascript">7 g( R. ^1 ?- T5 z: g
  7. var second=5000; //间隔时间5秒钟
    + |7 U2 E1 D4 v5 n- b# g
  8. var c=0;
    % y- u: p! m5 u# d# I- Q5 Z
  9. function scroll() {/ D  K; b% }9 o& z
  10. c++;8 n8 a- `& ^! J+ z0 M2 `% q
  11. if ("b" == document.activeElement.id) {
    , i3 W, n( o+ U' i# j
  12. var str="定时检查第<b> "+c+" </b>次<br/>";1 y0 p1 @( k3 b* N* M- }! C8 H
  13. if(document.getElementByIdx_x_x('b').value!=""){- D& ]" z* ~  Y1 o0 `9 @+ Q: g( q& `
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    1 d" @- I# k) [$ y
  15. }4 d* J2 j) e5 w6 k9 H( e
  16. document.getElementByIdx_x_x('word').innerHTML = str;3 ?' b" |% x9 ?7 q0 N& }; M7 L
  17. }
    : O5 O/ K; m7 x5 J( x- w1 k1 M" Z- q9 y
  18. }
    $ A6 m$ O/ [! y; J: ^) O: g1 [/ y. v
  19. </script>
    & q$ N# Q5 y/ Q2 d
  20. </head>* V) V  j7 e3 [9 m9 v& v% d! V+ g
  21. <body>
    4 G4 P" _" A7 q9 @; }6 V
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    8 f" W1 A* C: V' |- o8 S. N  L
  23. <div id="word"></div><br/><br/>
    + w3 P6 I1 ]- k3 s: x/ Z% h4 @) u
  24. </body>. N9 Q1 A0 u( X- B2 |
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。; E% H9 j, y/ F$ L
  1. <html xmlns="http://www.w3.org/1999/xhtml">. t! R) s- d; c1 E
  2. <head>
      P% `1 X  \: \% A$ l5 x
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    9 e& c8 k: k; Q7 ?' Z) ]8 g8 Q
  4. <script language="javascript">2 U4 s+ S3 Y3 L; m
  5. function count() {
    4 I0 ~% |8 b7 ?8 n! K: C
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ( I4 q! p7 k* l& M% J7 z% d
  7. setTimeout("alert('十秒钟到!')",10000)  e9 v. P0 r) B3 x! l- I) }8 \( P
  8. }! B2 u/ G! S" S; `$ \) W
  9. </script>6 j5 `! m9 E# @9 C/ X3 w
  10. <body>
    + u1 a' ~2 {1 p$ Q
  11. <div id="m"></div>( L7 R5 c" u4 B7 z9 Q' l+ S
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    0 d- G; P& ^1 x2 M/ ~% ^: U2 b) G
  13. </body>
    " h7 Q: A. x$ D/ C
  14. </html>
复制代码
例4:倒计时定时跳转9 P( ?9 u7 B: `, b. m# r5 J6 K
  1. <html>
    9 j+ o# d7 p  U. m' s2 R
  2. <head>
    2 B9 s: y- {6 r8 i3 I
  3.   <base href="<%=basePath%>">
    4 k6 r& k! L: a& W, r- V
  4.   <title>My JSP 'ds04.jsp' starting page</title>4 c% s3 \9 v, `$ r& X$ s
  5.   <span id="tiao">3</span>
    ( `: @: r: ^% j2 o& B" W
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
      \$ X+ P" L( z9 o- F
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>- P9 t' `9 Q) A5 i; `
  8.   <!--脚本开始--># c, l! {$ B9 ~5 l( k* K
  9.   <script language="javascript" type="">' Q2 T' h) q1 q- @0 Q8 h& o  f
  10. function countDown(secs){- ~0 N* A5 \9 i; r- b( L
  11. tiao.innerText=secs;
    , _. A  F+ X: ~
  12. if(--secs>0)
    7 {. m/ U' k$ T$ {8 [+ v
  13.   setTimeout("countDown("+secs+")",1000);
    $ y" ]% w9 P7 _6 m$ o$ _2 i/ y3 @
  14. }
    ) \) o& x0 P& a0 X2 r
  15. countDown(3);( P  ]) k9 c% K- {: A) L" q. a1 }
  16. </script>
    4 o6 M4 }3 ]0 O) g! Q6 i
  17.   <!--脚本结束-->! G0 Q8 K* n7 H7 y- \! _0 u2 _
  18. </head>
复制代码
例6:
9 g! m8 X# h% ?+ P/ N" w
  1. <head> - A, H( X& {% S8 u, s$ G* @
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    0 w+ F, E% r# T; y
  3. </head>
复制代码
例7:% p& i" C9 g5 h* o) @/ U
  1. <script language="javascript" type="text/javascript">
    6 Q/ f4 e, `0 v( j% w6 t$ B2 _
  2. setTimeout("window.location.href='b.html'", 2000);* l4 u3 j7 R! A6 o3 }0 N8 b* C  d
  3. //下面两个都可以用/ H: ]5 h! _% y% \, u
  4. //setTimeout("javascript:location.href='b.html'", 2000);" v) f) n3 T4 `: d2 k5 ^
  5. //setTimeout("window.location='b.html'", 2000);' |/ R0 c" d9 }" S* Z
  6. </script>
复制代码
例8:
6 |2 v: M$ l* ~2 F+ b; C
  1. <span id="totalSecond">2</span>
      P. P4 p5 {- u& f+ A/ ?
  2. <script language="javascript" type="text/javascript">( Y7 @  G) m" A) ~1 r8 J# ?( ]
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ! m/ A& p2 d2 h! K) f' x. ]
  4. if(isNaN(second)){
    , E5 }) w3 X" N* F) W- i4 e
  5.   //……不是数字的处理方法
    - t. i$ ^( P5 v; f2 e
  6. }else{2 B  z5 g3 ^- `5 U
  7.   setInterval(function(){
    & G! T  D% `9 J# O: k! {( `: _
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;. z& C' v/ A" t$ N  Y& \
  9.    if (second <= 0) {1 H8 Q. U4 `5 y5 w
  10.     window.location = 'b.html';( D; ~) B% Y8 U3 S) e
  11.    }- C( t; D5 G8 e  {$ w! G  |
  12.   }, 1000);
    4 ?7 c0 X. N4 r* B+ \
  13. } ) i& w3 s8 V. t% z; t: @, b& B
  14. </script>
复制代码

% B1 }+ U$ _: V7 D- A2 o& ~' D6 J& |0 \% Z- i& o6 l
5 W1 r, S& V& k- \* `1 c' S$ Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-6 02:43 , Processed in 0.122369 second(s), 19 queries .

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