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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ; J4 t. v2 S& G
  1. <script>
    3 \. ~* ~4 `  d$ ^. @
  2. //定时器 异步运行
    7 X6 O% z$ w7 C6 i4 h
  3. function hello(){
    % x$ m1 W: Y% v7 _0 A' B! v
  4. alert("hello");
    ; a# B$ k) Q6 t0 Z8 z# T
  5. }
    + d& m" y& o( H2 |# `
  6. //使用方法名字执行方法
    ; P, A2 c! z" `' \) X9 O
  7. var t1 = window.setTimeout(hello,1000); ) R' h8 ]; t) d" r2 D, h
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 9 i. _2 m6 s  p; J. {! w* \# Z6 J
  9. window.clearTimeout(t1);//去掉定时器 6 N5 |% P  F% }6 u( `0 n! F" _- l
  10. </script>
复制代码
2,重复执行的定时器
2 L% P+ U3 r8 w5 W
  1. <script>
      r. J0 A  s( N
  2. function hello(){ : P( S1 y; B7 B3 h* f: l
  3. alert("hello"); % P# v3 k1 C* C3 V- t0 T
  4. } : k. C- J; j0 \$ _
  5. //重复执行某个方法 2 O, N! c% M8 H9 s1 U7 a
  6. var t1 = window.setInterval(hello,1000); , y3 \" o! ]  B1 L' ^
  7. var t2 = window.setInterval("hello()",3000);
    : U7 X# ?& P# }1 y3 v5 _$ u
  8. //去掉定时器的方法
    4 \' q6 |, K# b- z
  9. window.clearInterval(t1); 8 L' G5 [0 e) @
  10. </script>
复制代码
备注: " O" e6 Y' W' M' {9 s
) ~2 d* p! J9 z& H
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: : ^( Q& q! @0 N- U& v/ R" A; z9 o
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。" E+ J" C) e( z  V
: u5 J/ B# W, e& `

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
4 C- _' Z4 ^5 C6 S- _4 h2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成3 B  x# m& }; g4 h
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
! k# O  q* f  p$ F" t  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。1 A  o  T: e& V7 c# v
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,- W- O8 _2 A7 Q8 \) p' u2 `+ N
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
  D3 X0 n6 k& v; h' w比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
+ ]% t4 w, c- ?( k' R- qsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.6 q8 z2 ?) ]3 h% W+ _
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象* g" G( K* y# r+ t/ ]* X: {* o
clearInterval(对象) 清除已设置的setInterval对象

略举两例。( h7 m" X" V. I* B$ M8 p2 s: j, L0 U
例1.表单触发或加载时,逐字输出字符串

9 Y8 H' d# C' {* v5 B
  1. <html>
    ! h# Z! B4 e" U; a6 @
  2. <head>+ U, @, i2 g1 _, w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />+ e" m; b9 N3 H' _4 `2 a
  4. <title>无标题文档</title>
    0 U6 {  l- Z7 k! l
  5. <script language="JavaScript" type="text/javascript">
    * ]; A$ w, U( V) h8 r5 t
  6. var str = "这个是测试用的范例文字";' o, V. o' ~' b2 b% I) U( p
  7. var seq = 0;
    3 P3 q8 N3 u. t* \7 P9 O
  8. var second=1000; //间隔时间1秒钟
    ! X7 \5 q3 _9 h+ {/ C
  9. function scroll() {
    # p) B, F2 ~! p. a. M
  10. msg = str.substring(0, seq+1);
    ( s, V+ N  P1 s) p2 v: R
  11. document.getElementByIdx_x_x('word').innerHTML = msg;9 B4 Q+ l2 x- X# \3 S
  12. seq++;
    - n: u1 \* ]; P
  13. if (seq >= str.length) seq = 0;& O9 K  ?. I( N2 c- O$ H
  14. }1 ]1 y% {( D0 r1 O
  15. </script>3 ?8 S0 U( r( E* ~) U
  16. </head>  N9 D! |3 r4 H  O" H9 D
  17. <body onload="setInterval('scroll()',second)">
    % Y( e$ k# x+ p1 G5 P
  18. <div id="word"></div><br/><br/>
      U0 F8 S$ Q! Y/ X. N% k
  19. </body>
    % q% K; i/ \  b! K9 C2 n! i' S: I
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。" W! h7 L% k, e+ |
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    7 a5 K* y9 H+ o
  2. <html xmlns="http://www.w3.org/1999/xhtml">* H- H! r5 j- d! G8 A7 n: t  l; S/ P. I2 {
  3. <head>
    7 P5 M1 b" k, d" O
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />8 b: |; N$ V6 e! ~) Q) t
  5. <title>无标题文档</title>, W7 [- i; h' }( l
  6. <script language="JavaScript" type="text/javascript">$ V8 R, t- D! }0 m2 B
  7. var second=5000; //间隔时间5秒钟9 j- H. c7 F7 [; W8 f- r
  8. var c=0;5 v* @) A! p. l2 K, X0 d" {; E
  9. function scroll() {
    0 `/ [( B  W0 z4 _! i
  10. c++;
    8 X+ w9 F2 k3 q
  11. if ("b" == document.activeElement.id) {0 h8 O2 H" l( f% \- y; B
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    4 R+ y6 A& f& `! s
  13. if(document.getElementByIdx_x_x('b').value!=""){
    / r% k- u7 d: F: v( J1 d- a
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";1 ~1 m; R1 b# M* w& Y
  15. }8 A* L: T8 `; x% g" h1 x
  16. document.getElementByIdx_x_x('word').innerHTML = str;: _: z$ w/ D* z+ J
  17. }7 Q6 X( X6 K6 Q
  18. }2 A; m) z) ~& c1 Y7 X0 F
  19. </script>" j5 |$ W/ }/ }
  20. </head>9 P: `" n7 i2 N1 e# o3 u+ T8 V
  21. <body>/ m7 a8 ~8 z# H
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
      {! W( V0 I" y; z( U) l
  23. <div id="word"></div><br/><br/>
    ; |1 T( E7 a* X# R% l, V5 ^
  24. </body>$ k/ _5 V& Q+ @2 Z5 Q
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。0 J% Y7 Q8 ]; N3 X7 Q' w: j( a# o
  1. <html xmlns="http://www.w3.org/1999/xhtml">7 q  b$ f+ L2 }7 Y
  2. <head>
    & h% h9 X$ P5 W1 W* R
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! C- T; h" o5 \( t2 u
  4. <script language="javascript">: i2 b4 Y1 C; k
  5. function count() {) e) T! Y1 @( A6 z4 C  M6 ~/ I% X( u
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ' [, {* k* P1 p9 ?0 ~
  7. setTimeout("alert('十秒钟到!')",10000)3 F" Z& k# n3 G2 r7 _1 B8 f0 H
  8. }
    . P. T+ ]5 D8 M
  9. </script>
    9 ^" q$ q4 H! t7 |1 p( S
  10. <body>, |& X+ t: m8 H* k, N$ n+ Y
  11. <div id="m"></div>
    ( k) R- V" N& ^9 u7 v: A) k
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    + z( g8 S. x/ N2 u
  13. </body>* b* r- s- M" P2 N1 ?$ G
  14. </html>
复制代码
例4:倒计时定时跳转
7 f3 M: {7 E! d! t0 O8 R- B2 t
  1. <html>$ r! k2 M2 J0 s7 ^
  2. <head>3 N9 V* C1 i$ m+ H& b  a2 ?9 ?" `
  3.   <base href="<%=basePath%>">
    : ?- @7 [$ l% O4 R
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    4 B6 g0 [$ u- }1 S4 r8 x& F) f
  5.   <span id="tiao">3</span>5 A* M& P# ^  |2 ~* P  w8 l
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……. U/ V1 I5 a/ H& s( I( q
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>+ F8 q6 t% l8 ], U
  8.   <!--脚本开始-->
    & p$ M( [( ~. @1 t+ g* H
  9.   <script language="javascript" type="">6 {- k2 s! v/ k- f3 J% Y5 t
  10. function countDown(secs){
    " D: |& D5 n4 R% @. ]4 e2 ]/ v% G# c
  11. tiao.innerText=secs;+ h, {, E' p/ u* n: t( S) G2 T
  12. if(--secs>0)0 R4 ^' R9 [2 u7 ~# l* M
  13.   setTimeout("countDown("+secs+")",1000);& Q" V/ M1 U, ~. E) k' M1 f1 i
  14. }8 y4 U1 S( @- D0 Y
  15. countDown(3);
    # G8 ~7 q9 B1 c8 K/ g" [3 X$ k
  16. </script>: C# T6 ~) U2 t8 c# P. F
  17.   <!--脚本结束-->  y6 i4 r* L& c8 n# p% ^; o2 j
  18. </head>
复制代码
例6:' \( v; D4 E4 Q+ Y) G
  1. <head> : b2 [. y2 o% O) s; x5 a/ q
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> $ H. r; G0 C4 ]
  3. </head>
复制代码
例7:
" m' E% G+ J, h
  1. <script language="javascript" type="text/javascript">
    , }9 h) g" O9 A  e: s: o
  2. setTimeout("window.location.href='b.html'", 2000);: j+ E& |, f/ M; d) n; g( b7 {' w
  3. //下面两个都可以用1 m. M" b; N) W( c+ T3 W# E
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    5 v& `. q/ K8 ^5 o/ v
  5. //setTimeout("window.location='b.html'", 2000);
    ! w, @( _9 ^; r# Q
  6. </script>
复制代码
例8:
1 m' Y+ J, }( }2 k2 J
  1. <span id="totalSecond">2</span>5 H) s6 `, \1 ]2 d
  2. <script language="javascript" type="text/javascript">% O/ Q8 A/ J) H* N" T5 E
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    3 x: s, W8 a* w. `
  4. if(isNaN(second)){" a$ }' @+ N, Y4 I
  5.   //……不是数字的处理方法7 H: N' _# M' [4 y9 @6 ^/ K
  6. }else{0 A! T6 J* N$ I( |3 H6 l
  7.   setInterval(function(){3 O* X; W# O7 |, E
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;# X* |+ y- G/ T* ?! k! O8 V$ ^
  9.    if (second <= 0) {
    . @2 a. m% X1 p! ]- T
  10.     window.location = 'b.html';* Y$ _- b) t: {
  11.    }
    2 F# E2 m: P2 a4 [9 j' j& G' O
  12.   }, 1000);9 I# p4 q! y0 c  \! p& o8 q
  13. }
    ; _2 t' X" m; O5 M
  14. </script>
复制代码
* U; e( L+ W$ t- z% R- A) i
" J/ D$ Q8 k* O$ h3 B
3 f% A3 X0 r. Y: ~6 m! Y+ m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:43 , Processed in 0.169824 second(s), 19 queries .

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