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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 0 Y5 u* U# f+ @1 J
  1. <script>
    0 M7 H% l$ r( C6 e* t3 f
  2. //定时器 异步运行 4 s1 O8 R  k$ f5 r) Q" H9 c9 K; L* h
  3. function hello(){ ; I/ C* j6 ?1 C- T- o  f
  4. alert("hello");
    " J/ w9 D" ?0 W
  5. }
    " G" d$ l$ R0 K
  6. //使用方法名字执行方法 3 y5 ^5 c* G: H5 `0 z( p" z; G
  7. var t1 = window.setTimeout(hello,1000);
    % L! a3 H' \) X8 {
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 ; i( V% P+ ~6 {! H  N
  9. window.clearTimeout(t1);//去掉定时器
    ' m, U7 G$ S9 F- j
  10. </script>
复制代码
2,重复执行的定时器 ( h9 ?$ R5 m/ K" S8 s/ D
  1. <script>
    2 p" N, H* j% Y" Z( d4 {
  2. function hello(){
    4 ~( i3 y% S' U' Z: t) K
  3. alert("hello"); 6 C6 z. a) I2 @6 }& X4 M1 p5 E
  4. } ( c: Y$ P) D3 q% }" Q6 g2 B
  5. //重复执行某个方法 $ ?! F! v3 [# q: c8 ]  @: n
  6. var t1 = window.setInterval(hello,1000);
    # Q5 s$ W, Y+ x# X( R1 G
  7. var t2 = window.setInterval("hello()",3000);
    ) Y' f4 V# Q" N) f9 I/ V
  8. //去掉定时器的方法 " @( N. ?. R3 x, H: c
  9. window.clearInterval(t1);
    , _- i7 R" k! H* e; ]) P
  10. </script>
复制代码
备注: ; ?( z. ~" C& `# S
. e! R! ?  h2 {4 o( D0 A% Y
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: $ Z2 p6 I1 |( p$ `
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
7 n, k3 P" u" s' S6 l# R9 U; d6 K+ i0 a

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
! t2 k+ d2 n% D0 J0 p. X2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
: s% m2 `# p: u4 P5 P1 i$ @* c“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
5 m* _6 c! w4 E) _2 f2 K  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
" g$ G. u# a1 z% j. d* y* c( R比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,7 P# a  \& l: U3 V8 r1 u& J
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
  V# U4 h. n) T比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
7 X3 j, |/ V- c" {setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.+ A" I4 l7 V1 \  m' m
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
/ A5 c9 x$ [' y8 r/ FclearInterval(对象) 清除已设置的setInterval对象

略举两例。
2 H+ f4 U) k) T% k- m$ T例1.表单触发或加载时,逐字输出字符串

& ^2 Q! I( k" C
  1. <html># `1 D0 C: v( n2 y
  2. <head>
      }3 P& g; i! X+ G5 p0 d
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />& D$ s1 x" @/ g
  4. <title>无标题文档</title>
    1 |7 V$ s, C1 F; D
  5. <script language="JavaScript" type="text/javascript">6 D: y4 }% W: H7 I) e
  6. var str = "这个是测试用的范例文字";
    + s$ M  l* A; Y5 Y
  7. var seq = 0;
    - w  v1 m2 K$ h: x1 k
  8. var second=1000; //间隔时间1秒钟. D( K! A. K/ _- O0 G
  9. function scroll() {
    + e& W  s" S& F0 Z7 G+ p' m/ q6 ^: ^
  10. msg = str.substring(0, seq+1);# Q7 G& F- m! z" }. |" S
  11. document.getElementByIdx_x_x('word').innerHTML = msg;/ U5 {6 p# D5 F9 p3 z: o7 z
  12. seq++;" D$ N0 T* a$ n7 ?
  13. if (seq >= str.length) seq = 0;
    # s/ ?' u* [0 _' j% {0 f
  14. }
    $ U: C( m( E; O  X1 |. N3 `. O
  15. </script>
    : C) `- _, s& H  S5 ]
  16. </head>
    & x$ u! K, a. W$ S( n" J
  17. <body onload="setInterval('scroll()',second)">6 J; y4 k0 b  \& x' y3 G
  18. <div id="word"></div><br/><br/>
    2 Z& ^' |5 i! M6 ]9 y) D
  19. </body>
    , D' @5 u" H2 _8 Q, p( y, w" T
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。8 k( O* j9 e1 ]( A% A" D
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      ?9 m. V0 R: j4 T; s
  2. <html xmlns="http://www.w3.org/1999/xhtml">3 Y/ Y) U6 |8 Y8 l* C2 a3 {
  3. <head>! W- K8 k! Y. v6 {
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 e. R( E1 h0 O$ {
  5. <title>无标题文档</title>
    ( a+ R; p5 v6 g# k7 O
  6. <script language="JavaScript" type="text/javascript">
    " Q* U, X1 y  V0 J
  7. var second=5000; //间隔时间5秒钟6 f0 \0 ~5 l6 M
  8. var c=0;2 |! |# q& \0 m. C
  9. function scroll() {
    - [  o! t5 P  P! }
  10. c++;0 k1 Q" [! ]: b0 d0 f9 ~
  11. if ("b" == document.activeElement.id) {
    9 T( B0 d& }& g& |! t8 }' ]
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    - c4 H. b3 \  B
  13. if(document.getElementByIdx_x_x('b').value!=""){/ B& S6 }! f$ T. [/ H; H
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";4 w# F! w  J: R9 @% Q- h: B% B& }
  15. }4 u$ O6 t) D: v' W
  16. document.getElementByIdx_x_x('word').innerHTML = str;  \9 @" F/ I0 r
  17. }
    0 ^& T/ W* K! ]" `. l1 h
  18. }
    3 i" c, K; N, g1 [( L; z7 q
  19. </script>. t$ f; u" Z  g* j! t
  20. </head>
    3 i) s* k4 c, V  Y$ j& F
  21. <body>$ F& Y' a3 o6 @. y( N; ]
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>7 v  `  |5 c' C+ c
  23. <div id="word"></div><br/><br/>8 T2 ?8 n/ ^3 Z/ ?8 C
  24. </body>' M( ?3 \2 r+ m* [( _
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。4 x8 w# T4 ]3 K* y
  1. <html xmlns="http://www.w3.org/1999/xhtml">8 I$ z. l# v; Y" D* @8 d
  2. <head>; C. `' g( x  H+ T$ V+ F6 Q
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 C5 s/ f2 |% n* K! O! p% y' ~
  4. <script language="javascript">! [0 i9 Z; N6 K, B- L9 N  m' p6 k
  5. function count() {" K$ ~5 d% y6 c
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";7 @( d& A! X" O. w( U$ p+ I
  7. setTimeout("alert('十秒钟到!')",10000)
    1 k, o% K2 [& [3 C/ R# _
  8. }- |1 j# l6 h! n# C6 v8 v
  9. </script>
    + r; j, v! A( n
  10. <body>
    # m/ |( n! S0 y9 E6 [
  11. <div id="m"></div>
    : b+ Y2 ^8 z/ [7 K7 X5 h! h; D$ H& f
  12. <input TYPE="button" value=" 计时开始" onclick="count()">5 H5 s& [' A- F) U' R
  13. </body>
    ; b* m3 `5 ~  W3 v
  14. </html>
复制代码
例4:倒计时定时跳转
) C% Q; ~# R4 P% u/ I/ j
  1. <html>1 j( a. o8 A$ M: \# b' j3 J, k/ N
  2. <head>
    , e. ~% w; l0 t, j0 u/ J% U7 t/ E( B
  3.   <base href="<%=basePath%>">6 E8 q; R% x7 Z. M
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    ; G# S  F' N5 u4 n- |4 B" N; k( m
  5.   <span id="tiao">3</span>1 {  q$ b- C3 m' g" ^
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……) O8 c5 u3 P' b
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>+ G  s' m2 j1 ^# a$ C5 T
  8.   <!--脚本开始-->
    & t5 `  m( ]; F0 j
  9.   <script language="javascript" type="">  a  t* p+ m: v; `' Z1 g/ }- _( X
  10. function countDown(secs){' n+ x, ?2 f5 L/ \& Z
  11. tiao.innerText=secs;4 L* O. _7 f* G3 U' @% a  R
  12. if(--secs>0)
    . r% i; o" X' V2 u: c
  13.   setTimeout("countDown("+secs+")",1000);
    3 o7 `$ V: ]4 j% u5 l: j
  14. }) h1 H5 q0 Y! n+ C
  15. countDown(3);
    4 j( l6 J5 L1 b9 V
  16. </script>
    % Z. D5 q% u9 r9 i1 G2 Z- O
  17.   <!--脚本结束-->0 r' a! ?+ [1 E7 h1 k5 e5 ?
  18. </head>
复制代码
例6:# t# S) ^# g4 m) c1 P
  1. <head> ( Q# D) v: R+ e  ?7 F5 y! r* K
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    9 _9 u) ~+ O$ ~( c1 U, S
  3. </head>
复制代码
例7:$ U8 Z3 d# U" r8 e# [
  1. <script language="javascript" type="text/javascript">
    # c1 R$ a& ]( y( R2 }4 b$ S2 p
  2. setTimeout("window.location.href='b.html'", 2000);( d0 Q: v: h6 T! F: y  _0 n7 @
  3. //下面两个都可以用
    6 ~9 J" J# |, I" L# ]; d+ D
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ( ~# T; k0 }9 V
  5. //setTimeout("window.location='b.html'", 2000);* [& |( O: Z: n8 T6 K0 K
  6. </script>
复制代码
例8:
+ S8 {" @( b: t! s$ G0 ?  U
  1. <span id="totalSecond">2</span>
    $ d$ b; U  B  v7 u2 b
  2. <script language="javascript" type="text/javascript">
      S6 U! V6 y' E
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;* m, m! a& h& t% f
  4. if(isNaN(second)){! L+ U- F$ [& n4 G* x
  5.   //……不是数字的处理方法6 j% w5 {! H7 J, `" b) n
  6. }else{& T( G- T( q, O5 A
  7.   setInterval(function(){" h- r" j* q9 Y- u( R4 H$ [' ^
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    9 f" y, w6 x! ]& `1 z# C; R1 ~
  9.    if (second <= 0) {: I6 W/ q5 l3 ^
  10.     window.location = 'b.html';
    , k7 L1 c- r* X$ z* J7 j: h4 b
  11.    }: c9 A! z" w8 _- H
  12.   }, 1000);# p8 M4 i! C. p" o# u$ |
  13. } $ t: n/ q/ @! _3 H1 v3 x+ Z7 K
  14. </script>
复制代码

9 W8 v7 e* \7 _$ d% S# G. d! U
' Z, |) S6 u: c9 G# g! U+ t
4 K" z! r: Q$ G, m3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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