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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
% u$ f7 D( k4 |4 s5 D& o# ]6 N
  1. <script> 2 Y4 l+ k" n9 L
  2. //定时器 异步运行
    , n8 t6 q1 q1 h# B7 q* _
  3. function hello(){ 4 H. I" p7 ?1 C$ m- d  ^
  4. alert("hello");
    ! h( r$ V- B- `/ v2 ?3 O" K  @
  5. }
    ) d4 ^  {& i% S4 N5 r
  6. //使用方法名字执行方法 + e4 \% _, p+ _9 x! F3 d" Q/ q% B
  7. var t1 = window.setTimeout(hello,1000);
    4 q4 P" ]+ w3 O' n, m/ E( I; c
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 ! B) G; r' C- a; E
  9. window.clearTimeout(t1);//去掉定时器
    - j* O4 [8 R  j( N( k. F$ F# Z/ o
  10. </script>
复制代码
2,重复执行的定时器
% L1 r& A! \: v3 d- Z: K6 t
  1. <script> ) {2 ]" x, ?- B: R+ c5 h0 Z5 v
  2. function hello(){
    5 S, V" F; R. g0 s. E& P5 }/ O( x& h
  3. alert("hello"); 4 o+ @) V( i( V& c; W1 d6 X
  4. } 7 I4 N8 y% Y9 n! b
  5. //重复执行某个方法 ) y7 {0 R: v: V: F& u" C
  6. var t1 = window.setInterval(hello,1000); - H4 O3 H" }% E# p8 m
  7. var t2 = window.setInterval("hello()",3000);
    ( F' \8 G4 W! s3 I# W0 p
  8. //去掉定时器的方法
    # W$ ^5 @, i8 @
  9. window.clearInterval(t1);
    8 v5 \4 V, O2 C: ?1 |* [. k
  10. </script>
复制代码
备注:
7 f' b/ O: c5 C6 w- o2 @$ B( [- w0 Z
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
. q& o# K  u% U可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
! G6 I) a, D) M9 A3 f/ k0 t* r0 q% \0 S: s

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
4 [; h5 Q" U4 {3 K5 V+ c5 Y/ q6 T2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
4 @: I# W4 z4 @2 B7 g“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。& v( B0 O+ p) {. n' H. H9 C. ^
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。6 v( [# b- r+ O7 d" |
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
% [/ t  T0 P3 w" N" w8 y则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
* ?' ~& y1 ?8 r, {' L2 p* ]比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。' X/ Y3 d" n  ]" z# w2 @3 e
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.# v# C5 D0 E$ t% A# }
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象' ~" D5 ~. R7 v+ p
clearInterval(对象) 清除已设置的setInterval对象

略举两例。  C$ E) C  _, s6 ?: }2 G+ w
例1.表单触发或加载时,逐字输出字符串

5 a7 N1 g) c! R& ~9 K1 S. c) {
  1. <html>- @; ^* Q% X4 }* R& ]
  2. <head>
    0 q- M. L8 W, `1 t. `/ H( \* r$ C% C; {8 O
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />! n6 x8 Z3 V2 }4 k4 j: u
  4. <title>无标题文档</title>3 P+ S4 ~- M4 r
  5. <script language="JavaScript" type="text/javascript">, n; c2 _) U% N. G7 n$ f  E! ^; C
  6. var str = "这个是测试用的范例文字";. j6 k/ p, h+ s' l
  7. var seq = 0;
    5 l- N0 \8 x5 @% J
  8. var second=1000; //间隔时间1秒钟( C; p+ s& y! T1 f! b' l1 X  v# p. B
  9. function scroll() {
    - ?2 \( w9 d' i2 W! E+ c
  10. msg = str.substring(0, seq+1);" _8 n& \! e& O' U( `
  11. document.getElementByIdx_x_x('word').innerHTML = msg;# Q6 L+ e- Y; G% _: l
  12. seq++;. F8 i+ Z5 f- b/ Q0 O4 ~% `) ?
  13. if (seq >= str.length) seq = 0;# b, L1 _1 h" F8 ?% L
  14. }/ {, S' |2 Q8 C1 U" m
  15. </script>& V# ]  s  v: K
  16. </head>
    & _% t& J& x' a, _) |
  17. <body onload="setInterval('scroll()',second)">) ]5 r& h$ g5 ^* Z* ^
  18. <div id="word"></div><br/><br/>
    , e' O! ]6 M% t5 v+ y6 U
  19. </body>
    3 N  p- F1 {, I9 \3 ~* g
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
, Q" n' P% i9 W& a! ^4 t8 I6 w
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    ) p- s2 q( ^$ o6 Y) T$ E# b
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    + C0 }6 n# D3 g6 `$ A$ Y( A. K
  3. <head>! R9 |/ J; |3 z) a$ ~+ o5 D* a* X
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  t6 `* R' D  B: t4 J6 ^
  5. <title>无标题文档</title>' G# Y/ ?( D# i/ s! t' b
  6. <script language="JavaScript" type="text/javascript">
    " x1 g& l4 I6 m
  7. var second=5000; //间隔时间5秒钟- @" K' f% S% x
  8. var c=0;4 a4 V% v2 F( I9 n6 g
  9. function scroll() {7 U/ {- `- r0 n- j  q- N; q7 X8 f
  10. c++;
    " W+ {3 U/ \/ x0 v! {6 H$ I4 Q
  11. if ("b" == document.activeElement.id) {
    4 ~: m4 }# {( u4 M% x' g
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    & `- w9 Y1 ~" i$ O2 H
  13. if(document.getElementByIdx_x_x('b').value!=""){
    # M; H5 G2 S9 v( R( {; ^6 Q3 B: d
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    8 A$ Z$ C; c$ Z: h
  15. }+ ~$ [. c* @) O/ p& f. P& d
  16. document.getElementByIdx_x_x('word').innerHTML = str;% N- K" H, u0 i/ ^9 J
  17. }! @+ l+ f8 x) b' K! A
  18. }4 X+ r, N& T! f  {3 [
  19. </script>. Y3 \! W2 c  F0 M9 p
  20. </head>+ b  K$ J# d5 s
  21. <body>
    % X$ O5 u1 I0 @" v
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    % A$ d3 [) I2 S4 ?! S
  23. <div id="word"></div><br/><br/>
    6 [1 l& n0 p, J& |2 c
  24. </body>
    * E( n" v, l" ^, b4 F  e* t1 r- b+ ?) }
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
  O( U! ]8 ]* D9 E+ p2 q: @
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    ! h$ w: [0 W+ ?2 z, h5 q
  2. <head>
    $ X+ ?7 D+ }$ H6 r0 w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />) A6 F8 W- e- P. a$ ]1 |
  4. <script language="javascript">
    3 y5 j) s$ @) J! ?
  5. function count() {
    : c) M1 K4 q; b/ y, }+ U
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";* v8 t  h- T1 l+ |/ j" S
  7. setTimeout("alert('十秒钟到!')",10000)# L( e/ E' J6 p
  8. }
    * ]% d3 e' d% |% M
  9. </script>
    % F+ p5 U" C0 `( o: J4 J
  10. <body>
    ! P" ~/ ]2 `/ A9 O( K$ }5 x
  11. <div id="m"></div>
    ; I) m% Q! |* U* Q
  12. <input TYPE="button" value=" 计时开始" onclick="count()">8 Z. v- k* u; l- z7 |: L' K
  13. </body>
    9 Q8 Y7 M! K- h% A
  14. </html>
复制代码
例4:倒计时定时跳转
' [5 a3 e3 M0 `& E0 {, ]2 s  n$ v
  1. <html>
    ! o& i" t5 i- j+ L8 I& p& I  Y) f
  2. <head>( C1 T+ ^) g1 S4 t
  3.   <base href="<%=basePath%>">
    5 }! L. a6 ^2 Y, n
  4.   <title>My JSP 'ds04.jsp' starting page</title>9 [# n  J7 f8 o( z. w  @
  5.   <span id="tiao">3</span>
    ' T" f; }! l. E0 J
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    7 c) }+ V* N; a" r2 M
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>; E2 ^3 V) [& \: i- j( _/ F
  8.   <!--脚本开始-->
    ) w, M$ K$ w# q9 Z0 {5 o
  9.   <script language="javascript" type="">1 O! v3 C; Y3 q9 `7 |8 Z; L0 H
  10. function countDown(secs){6 e% l1 U3 m! {2 I, {& n( r/ ^. L
  11. tiao.innerText=secs;% y5 x# J5 N: O* |' U. w
  12. if(--secs>0)
    ) I( g/ o3 U2 Z3 i
  13.   setTimeout("countDown("+secs+")",1000);" i# h7 k: x6 \. M
  14. }3 O0 u; i0 c1 D$ z+ T/ P8 R7 N
  15. countDown(3);/ \$ C. t, s" M6 ]0 w& {0 I& Y9 p
  16. </script>
    8 C0 o) M% B) P' ]0 z( n8 c
  17.   <!--脚本结束-->
    8 W9 K% J) k' T. G1 ]1 [( p1 i
  18. </head>
复制代码
例6:: a1 o! W3 c( ~
  1. <head>
    + i3 V$ T+ R; b7 |' }' Q# \7 q
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ; M& F- S- h) |9 j
  3. </head>
复制代码
例7:& _  B( F! x. w/ O  }3 Q
  1. <script language="javascript" type="text/javascript">: W" X5 }. ]6 H- Q9 ~$ F7 ?
  2. setTimeout("window.location.href='b.html'", 2000);0 g" [  E! \% Y9 d# [  ~7 ~
  3. //下面两个都可以用
    " Z+ b( x% X- S0 y  x  T# X# ~! E
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    0 B" Q& \2 m5 ~/ ?1 v& W' ~
  5. //setTimeout("window.location='b.html'", 2000);4 v/ O' w6 b, r
  6. </script>
复制代码
例8:
9 j) w: E- w% t2 o
  1. <span id="totalSecond">2</span>
    ( D: O. M) W" q: w: l
  2. <script language="javascript" type="text/javascript">! Y. F1 ?* T, C9 Z9 W8 I! v6 Z
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ; \. l+ c1 ?" p( _2 |7 v! x8 M2 d
  4. if(isNaN(second)){
      [/ `& Y7 V* b9 }6 u2 X
  5.   //……不是数字的处理方法0 e6 N1 H6 ~# J7 H' ]
  6. }else{
    + O" D6 w& D0 k) T# \9 F
  7.   setInterval(function(){/ ]+ P+ P0 P; L9 c1 a# _
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;4 U( N$ `2 h- k1 W
  9.    if (second <= 0) {( ]& M3 ^, ?' `9 \5 G
  10.     window.location = 'b.html';6 h( g/ w: t" ^1 v
  11.    }  B" w7 `. d5 o3 g3 X# m
  12.   }, 1000);
    ! R- G+ Z3 O: H& ]& l" C
  13. } ( ~' H# J. p) y* }7 p) a/ _
  14. </script>
复制代码
6 D8 l7 j4 o, B" f+ B% F
. o- O. p( R1 B) P

* Q( @: _9 C) e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 03:33 , Processed in 0.109833 second(s), 20 queries .

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