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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器 5 x5 O, t' _1 A
  1. <script> ; j% n! ^& x. T6 Q
  2. //定时器 异步运行 ) e) w: E- i9 W$ F  |7 ^# j
  3. function hello(){ 9 O# ^- d4 U, X0 C
  4. alert("hello"); . {' D8 l2 x- \  N: h
  5. }
    ' z8 I, X& M' I& N3 G
  6. //使用方法名字执行方法 5 z! b0 L; }4 S$ L
  7. var t1 = window.setTimeout(hello,1000);
    * ]" o# [1 i9 |$ n$ m
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    ) [; G5 G4 g: {
  9. window.clearTimeout(t1);//去掉定时器 1 I# R% z% t* b' Z
  10. </script>
复制代码
2,重复执行的定时器
* U& e3 _0 }" ~) R' g
  1. <script>
    " n: G2 Z, R1 `' ~) i
  2. function hello(){
    9 X" j) d# V3 r7 t7 h6 e
  3. alert("hello");   \! h  T6 |1 }0 j
  4. } 6 b7 y0 k. H5 v6 l0 r
  5. //重复执行某个方法
      L, M& k4 e, d/ A; e2 {$ o9 M+ D
  6. var t1 = window.setInterval(hello,1000); 2 w" a  e* T6 q) v
  7. var t2 = window.setInterval("hello()",3000); 2 c1 z  y+ C& z* h4 I" J9 P
  8. //去掉定时器的方法
    $ F2 x. n# Y& C2 V6 A: _. s
  9. window.clearInterval(t1);
    . n% N  e4 i0 m- V" h: _$ I
  10. </script>
复制代码
备注: 8 f8 P/ |; ^# \$ e) A

+ Y# X5 V2 A4 U+ m  R0 X' b% N如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: , ?3 {! X- u: _2 L
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
8 ?: m3 [4 A9 m& }
, `9 G% D3 {( G

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

1.倒计定时器:timename=setTimeout("function();",delaytime);. C8 G4 s/ J7 e  e% D& Y: Z/ U
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成3 P: t5 \8 u: e, N& X# c
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。$ ?, a6 N0 V8 ?! c# @- `
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。9 J* F1 @9 x6 Z. d4 D3 M
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
; l% A! k5 j( [  q% O, e' _则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
8 D) G7 K: w. W0 C0 k- d) j比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。0 V& D8 d/ Q  h) z5 `
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.# N- M$ F8 u" M0 ?( M& e% \
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
# N5 B: o0 j- F5 b/ t/ TclearInterval(对象) 清除已设置的setInterval对象

略举两例。
6 C- ^. c; F: M0 f3 p- g+ b: C例1.表单触发或加载时,逐字输出字符串


6 ^# v3 k# b2 G! X$ B5 y! G
  1. <html>- c. z1 W3 I/ E3 V6 a
  2. <head>
    3 s6 B% p  A6 e* D0 i7 m" a
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />- }) a( I2 ~8 j/ x
  4. <title>无标题文档</title>/ r' O- D7 a5 P/ p3 I
  5. <script language="JavaScript" type="text/javascript">( y: b4 R  |) O4 `, K
  6. var str = "这个是测试用的范例文字";& }9 I4 u1 ^7 B3 q2 \, r+ e
  7. var seq = 0;2 V3 ]# E8 a  m! c
  8. var second=1000; //间隔时间1秒钟
    ' B* `4 X. `6 D! S/ |+ L3 y
  9. function scroll() {5 b+ h- N" ]6 @) c: p
  10. msg = str.substring(0, seq+1);
    & H& @7 ?; z6 S! F
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    # H& B; ]) @8 i/ q
  12. seq++;
    . n4 J1 ~. [3 N. n3 D
  13. if (seq >= str.length) seq = 0;
    / W/ X5 |: o( l% a/ V
  14. }
    ; R! D# I  {+ d) V  m. q- t1 [
  15. </script>4 @7 k0 K+ V* r8 x  s
  16. </head>" b# A4 K2 x+ g. t5 a0 L3 r0 |0 E
  17. <body onload="setInterval('scroll()',second)">
    " Y8 f* o; E- J1 n( O' |$ B- v
  18. <div id="word"></div><br/><br/>, j3 Z$ j& v* M1 f& }+ `, y- g
  19. </body>
    0 G0 S" p( l; B4 W0 w
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。4 M  f0 f6 ~# D: E% @" B5 |( [+ r
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    . g' r+ A! {( W7 H  K1 _
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    ! J& ?' H: M; x* p( U7 h
  3. <head>: m& o* T2 y6 l8 ?6 K- h$ s' G3 ^
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  R+ a4 k0 O3 K7 a: ?+ G
  5. <title>无标题文档</title>, ]# y( R3 l6 l6 U( d( j3 y
  6. <script language="JavaScript" type="text/javascript">
    % \$ {4 H* P5 C  ]
  7. var second=5000; //间隔时间5秒钟
    ; J1 R! t! i- |% Q) g, [4 g
  8. var c=0;( n* h. h, J4 Z
  9. function scroll() {  C* h5 u9 V; J7 H( Q/ ~
  10. c++;/ z5 g2 P: C* {9 X6 x( d+ f: T" P' E
  11. if ("b" == document.activeElement.id) {
    8 J0 d& R5 |7 c- ?+ x$ c4 X& m$ C
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    ) M3 S9 k" O' r* Q3 O3 L1 X
  13. if(document.getElementByIdx_x_x('b').value!=""){
    * m: E* r. m7 M5 \4 `
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    - o% z: Y1 \- B' n! J  x& W( Z
  15. }
    7 d- E7 E3 x  R1 r$ j/ E8 u* D
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    5 n* C) S* o& E/ k  d3 ?0 }8 u- B
  17. }
    2 \6 A# d4 ]8 k, Z) Q- B% j. ^* T
  18. }1 Q' v8 M) g" f2 Q% a% R) [  v4 T
  19. </script>7 q" k( C; w7 R  I
  20. </head>8 w0 z$ ~! d: \/ ^
  21. <body>$ i, L  M$ g9 U- ?4 {
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    % b0 D2 i8 c( {. E  C! i! u
  23. <div id="word"></div><br/><br/>
    ! y/ E5 z9 R+ [, T+ E7 P, S" Q
  24. </body>( H" J# u8 e% p+ k" z
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。8 O5 T2 W# G" L+ C
  1. <html xmlns="http://www.w3.org/1999/xhtml"># m+ j0 q0 _9 V" p; C# @
  2. <head>8 ]. w. h0 f2 k1 A
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ( g6 n* W) }/ e5 e  s, k% E
  4. <script language="javascript">
    5 X, i2 a, \3 @( o) U+ E  J6 M
  5. function count() {
    9 ?; O6 w3 R4 R' L5 M
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";7 W% @; @2 [$ u: w2 |5 M, f
  7. setTimeout("alert('十秒钟到!')",10000)
    3 J: u: @* f9 b5 |) |& c; y. n7 y
  8. }8 Q& l1 d0 u4 G/ q$ ]- x" _6 ^
  9. </script>
    3 Z' o! S1 H+ B8 U  A' Y" |
  10. <body>
    9 p+ ~/ C0 t+ Y) `
  11. <div id="m"></div>1 l0 p+ ~3 K( b9 r1 R4 ^3 k4 O" w# t
  12. <input TYPE="button" value=" 计时开始" onclick="count()">7 T5 Q- m1 ^& _
  13. </body>
    . P3 v) w1 R1 S; D% z/ `
  14. </html>
复制代码
例4:倒计时定时跳转3 a& B  l' p" o1 n4 d9 h
  1. <html># G/ o" O9 s! e; P; c
  2. <head>$ K6 a; m; z: V2 v' Z  q( J
  3.   <base href="<%=basePath%>">
    3 f( \8 {& j8 q
  4.   <title>My JSP 'ds04.jsp' starting page</title>4 V% J8 [, }& r% V" T: S
  5.   <span id="tiao">3</span>
    9 r$ L& u; i+ i4 g. {# ], `# w
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    + x0 N% z7 C$ D% f
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>8 `; }3 G4 H1 w) x; q( q- B& q. e
  8.   <!--脚本开始-->2 e1 h# |* M6 Q3 w
  9.   <script language="javascript" type="">
    * }( U( J& n( L6 s: X3 y$ j
  10. function countDown(secs){" t2 i, `, j) L) r( t4 y3 Y
  11. tiao.innerText=secs;
    # }- |1 p& T3 e4 [0 c( Z4 I6 b3 A
  12. if(--secs>0)3 Z1 q( [3 E% x& A4 k6 H! P5 D
  13.   setTimeout("countDown("+secs+")",1000);
    9 M7 W0 u6 j& a& {! W
  14. }1 ^; F3 m2 k2 Y- Z7 u% V1 F
  15. countDown(3);
    7 |  g- j$ W4 D$ L3 Z  m0 d. E
  16. </script>' x: W, T' |. J' s1 w" d0 q
  17.   <!--脚本结束-->
    % h8 H/ r- F: M" b3 g- W
  18. </head>
复制代码
例6:6 u* \# Q$ G7 }$ f2 F
  1. <head> # W8 g: Z6 {) R: o; p
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> , S8 \1 R7 z  h: p" U
  3. </head>
复制代码
例7:
0 g/ e- d& x/ F. f9 T/ \) D' B: w
  1. <script language="javascript" type="text/javascript">
    ) C6 f$ B5 V9 G, X$ F7 `* f! d
  2. setTimeout("window.location.href='b.html'", 2000);: y4 Y  c0 c, T3 Q; f
  3. //下面两个都可以用: g  ~8 S& e' \1 I
  4. //setTimeout("javascript:location.href='b.html'", 2000);" R* P4 U6 h1 s
  5. //setTimeout("window.location='b.html'", 2000);; \! ^! p) t7 \" }$ T9 |9 M
  6. </script>
复制代码
例8:
. L* L7 l/ r8 D
  1. <span id="totalSecond">2</span>
    8 q7 |9 l8 @3 E
  2. <script language="javascript" type="text/javascript">+ ?4 W0 q: r% [- |4 u, x7 S& b
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;" R# |' u' M# t; J1 M$ E
  4. if(isNaN(second)){
    2 b7 ^. L, o- s
  5.   //……不是数字的处理方法
    - S$ _$ t4 m8 K) r" _
  6. }else{1 G: O& o7 u$ G: ]" u( F
  7.   setInterval(function(){
      m! E3 V9 }8 u$ ?# ]
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;1 I* e, @5 d3 a7 U" M/ H
  9.    if (second <= 0) {' T8 d% n* i# N9 L* R  L) K
  10.     window.location = 'b.html';
    4 ^& i* x  Q* s: J
  11.    }+ S, J7 C' u8 [7 {, O6 V- M) I6 }2 y
  12.   }, 1000);1 z- x) d: j7 Q
  13. } 4 W+ K8 q4 b, G: ^
  14. </script>
复制代码
; Q; b6 r. g/ T( t' t7 n5 a

% ?0 g" V& T! ]/ N
4 \/ K# ]& t- ~( }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-22 08:57 , Processed in 0.057221 second(s), 20 queries .

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