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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
) I  u8 X* s, E; c: [- _  h
  1. <script>
    $ p: ^3 Y4 l$ ^7 {
  2. //定时器 异步运行 & P7 l% t: b' v) R; u$ Q  [! B
  3. function hello(){
    2 o7 Q6 |, F1 Y) K
  4. alert("hello");
    / f0 S0 K6 I- k% c
  5. }
    5 Z7 U/ x  a" O% ?$ R  I
  6. //使用方法名字执行方法 + u/ m6 d# ~' S
  7. var t1 = window.setTimeout(hello,1000); % M9 ~6 D7 ~) J4 s8 v7 j
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 # p% e% l% h/ w, H' ~2 Y8 _
  9. window.clearTimeout(t1);//去掉定时器 * g* ?3 ]/ f( z( ^  w* U7 [
  10. </script>
复制代码
2,重复执行的定时器
" F, M  d" ?9 T& w) U, O3 I
  1. <script> * y, l6 I- g6 \* i: p( u; _
  2. function hello(){
    & o: M. Y. K" \. ~) o0 w
  3. alert("hello");
    5 f, g* L; s7 A4 T6 `4 U& s/ @
  4. }
    3 t4 @6 R* O: {0 o
  5. //重复执行某个方法
    2 N4 f4 Q9 ~9 s8 C# A: e2 [
  6. var t1 = window.setInterval(hello,1000);
    * r) q# j" X" E1 X
  7. var t2 = window.setInterval("hello()",3000);
    8 R. k* F0 R4 G7 F' `; R1 A
  8. //去掉定时器的方法 1 {* D3 M$ }+ L) p
  9. window.clearInterval(t1);
    5 v1 q+ p5 F) K2 z+ X* S
  10. </script>
复制代码
备注: ( U, T$ J7 c! _) m8 N
8 G0 |" V  o- s" C; r; _
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
0 R, E* g$ K  U( B- F可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
4 f+ ^7 d% S+ e  x3 h
$ O6 S( ?! i0 a" F% R# W

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
& `8 E; i- }9 r. D4 V- A3 F2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
) U& _( l+ S) R“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
( @0 t3 i% X4 N$ g6 c  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
+ G8 z+ }; l' l- V) o比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,1 s7 U0 J4 ^2 ~: F
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。' A. N, G4 Z: D( G3 L8 H4 r* i. a
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。. p# z; K7 }' g4 l; Z4 r+ J1 V
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
% X, A9 H9 m1 p; ZsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象& Z8 e0 B' f! B5 J: u
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
" a. J9 ?0 H9 O* s3 s  c& a例1.表单触发或加载时,逐字输出字符串

8 ~, `% z  Z$ P. E" A  B$ y4 @0 Q
  1. <html>; ^" i0 @- [5 n& c: z5 K. t
  2. <head>
    , x! f8 B) g2 O6 z# j& ]" c
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />5 Z7 C6 r  O- b6 A
  4. <title>无标题文档</title>
    # h! ]7 t1 }* ?) z
  5. <script language="JavaScript" type="text/javascript">& G! Q' O; S  w$ [: [/ N; o
  6. var str = "这个是测试用的范例文字";4 h  A2 {1 C/ [' w4 f7 ~
  7. var seq = 0;
    0 d( R+ h; A1 i4 v" g
  8. var second=1000; //间隔时间1秒钟
    / y3 Q. h# {/ q6 V7 V5 {
  9. function scroll() {1 K0 N& G; Z7 E4 K6 {4 m6 m
  10. msg = str.substring(0, seq+1);6 w$ W- E7 _: d6 y
  11. document.getElementByIdx_x_x('word').innerHTML = msg;& P( `& K; h- I8 p* D
  12. seq++;
    % c4 ^, P3 F% d' h  ]$ h7 S+ D0 Z
  13. if (seq >= str.length) seq = 0;
    " L, y; I& @* W  c" H
  14. }
    9 ~% i1 S  Y9 f% ]! c) u2 {
  15. </script>0 c) ^& B6 b7 U  g
  16. </head>
    + ?3 l! m7 ^1 Y+ z- m
  17. <body onload="setInterval('scroll()',second)">
    5 I2 R4 N, ~7 y# P
  18. <div id="word"></div><br/><br/>
    8 q5 t! u+ r+ k5 X! ]  Q
  19. </body>
    : F( n: i7 u& [3 h
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
1 x* h. J: B9 H& ]* t
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">6 h2 W2 z* ~2 k/ C9 @
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    / }& `  H/ T$ O5 F6 s1 ^: S
  3. <head>! _  X8 ~3 ?5 B; j& o9 g4 e3 v
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    . Q. \1 @3 [, l. m
  5. <title>无标题文档</title>2 x4 O7 D/ E2 f4 _) f" A
  6. <script language="JavaScript" type="text/javascript">
    4 @* q( P; U0 q9 H4 r; F) m" O
  7. var second=5000; //间隔时间5秒钟
    4 V: J, z' R) p1 n
  8. var c=0;
    8 J8 C; o' ?% E, @6 k
  9. function scroll() {! _% l  X% `2 [# U0 D
  10. c++;
    , g4 f8 ?: U( |+ Q9 M; Y! ~
  11. if ("b" == document.activeElement.id) {$ J7 m/ j! f! P8 y
  12. var str="定时检查第<b> "+c+" </b>次<br/>";! S8 w( s) _  ?9 I. B! Z! G3 n
  13. if(document.getElementByIdx_x_x('b').value!=""){
    $ T1 n9 Y) e4 _/ R/ C( K5 B" d# m
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    3 q$ _( h$ t9 d* h7 Y. a$ d9 D  T- x+ W
  15. }
    & Q, |3 d8 h3 ^; H2 e* D* z
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    / ?# e% p0 L# G9 v: P9 x
  17. }1 u- {: v4 l% ]2 z8 q( t5 g' u
  18. }( i& E$ B+ k  _8 {  d* f
  19. </script>! e6 k$ }( d$ ^# d; W. c
  20. </head>
    , S; f2 L0 `% |0 l# F& w- O/ d7 |
  21. <body>0 G  s: f3 _$ i# \: K: l8 x$ y
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>/ r3 r9 `" n2 s+ ?
  23. <div id="word"></div><br/><br/>
    * O7 {" b( T+ j+ M* A7 W
  24. </body>
    4 X2 ?, b7 s, a3 L" Z# u( n
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。! x6 r9 `9 Y2 _7 \
  1. <html xmlns="http://www.w3.org/1999/xhtml">$ c4 X/ H* v8 ~5 G0 u& c7 L
  2. <head>
      A9 D3 Q6 L8 T& q/ M8 S
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    : g& P4 S. N6 r& ^9 j0 r( J
  4. <script language="javascript">2 J+ d" J% @! L- w; ~  M
  5. function count() {' V* G- W6 A$ i
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";1 e8 M$ t0 n) S# ?  B* _( `
  7. setTimeout("alert('十秒钟到!')",10000)
    # I6 @5 g% \5 L
  8. }" R7 t( t+ K+ N, _( b
  9. </script>% }6 V1 P: N6 j4 H* c4 _
  10. <body>" Z0 z' O3 U, e# V* ?' c% f) m4 d
  11. <div id="m"></div>( e2 ^& a) d( o1 ]
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    5 i6 T9 T; R  N* E
  13. </body>- R! e; q/ _$ _& Y
  14. </html>
复制代码
例4:倒计时定时跳转
) L% |8 B0 ?- C
  1. <html>
    1 Q. K8 K  g2 v, `2 W
  2. <head>* j( S# @: y! z" B0 h. K. ]
  3.   <base href="<%=basePath%>">
    1 E0 h  I6 p1 j, K, p% s3 r. V
  4.   <title>My JSP 'ds04.jsp' starting page</title>
      W+ r: r6 K$ P2 U5 f
  5.   <span id="tiao">3</span>8 @/ [; m. y& I2 h% o
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……" P8 m$ n. @9 Y- n4 h2 P
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ! `% k/ l6 _, M6 b" X& A
  8.   <!--脚本开始-->; I6 c' ]8 }2 z! x- ?
  9.   <script language="javascript" type="">, D* c6 r( M6 n$ W( U/ \
  10. function countDown(secs){
    ! I3 {$ X5 _& l4 E
  11. tiao.innerText=secs;
    7 h4 ^7 y1 h9 e; E& E7 ~% p
  12. if(--secs>0)4 ]& v( i% z. |' x
  13.   setTimeout("countDown("+secs+")",1000);
    9 @% {; k1 Y+ s7 _) E0 h7 {6 H
  14. }1 Y# a' ~9 R# L2 f9 |1 `, U: a
  15. countDown(3);
    9 \+ p3 C0 y5 Z' n/ Z# O2 Q
  16. </script>
    % G+ R) T  g' U& c  X+ X* ^: q: j  l
  17.   <!--脚本结束-->
    ( G, Y) Z8 i. F' O1 W' I7 m
  18. </head>
复制代码
例6:5 a! @! D! Y  ?' Y4 ?6 x
  1. <head> ' [$ A/ Z2 u5 t. b/ s2 W9 B
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> - X. r, Q/ A5 t
  3. </head>
复制代码
例7:
" U# T, Z1 D$ G& V9 c+ Z
  1. <script language="javascript" type="text/javascript">& d7 G8 v  m# o$ r6 F% t
  2. setTimeout("window.location.href='b.html'", 2000);! q2 J6 _$ d3 X0 U% D1 w0 R
  3. //下面两个都可以用  f3 m( t/ z$ I( `+ Q
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    2 P1 Z7 s& M0 _* v/ x: g% W+ N
  5. //setTimeout("window.location='b.html'", 2000);7 U& U  s) R% C2 H, S! B
  6. </script>
复制代码
例8:: ?1 ]8 J" j: K
  1. <span id="totalSecond">2</span>
    + H) l: m9 M5 ^7 {8 R; T; j
  2. <script language="javascript" type="text/javascript">4 F! K+ I6 p7 E$ D6 ^$ v7 F- f
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    & A4 u. ~, f- z! g$ Q0 p  \
  4. if(isNaN(second)){$ W5 A! F* r2 m7 A
  5.   //……不是数字的处理方法
    5 H+ A0 v5 N6 t  y  I
  6. }else{9 q$ l4 L% t  X+ K6 F
  7.   setInterval(function(){5 P9 P$ y/ k/ \0 u: Y+ x
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;4 O: i4 @0 t5 _3 O1 W) A  A, T- Z
  9.    if (second <= 0) {
    $ S( ~( Y! o/ M* T! B: S3 a. w+ J
  10.     window.location = 'b.html';1 G+ @! D4 L& Y! e: {; |# e5 }4 C, ?
  11.    }2 I0 u+ C9 l  p3 ~) a7 u4 }. i
  12.   }, 1000);  }1 H  K3 O* J. e' t
  13. }
    $ Q0 s0 B& F. _5 u% c9 }3 G$ X
  14. </script>
复制代码

( m/ T9 }  T" C0 _2 a/ w/ ~7 s
+ h. `; }0 V4 O( w$ q6 h* D$ }
9 Q7 `; f; N2 x$ n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:37 , Processed in 0.118329 second(s), 20 queries .

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