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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
: o) ^( {& U8 T) s
  1. <script> 5 P+ h) o# B5 Z8 _" R
  2. //定时器 异步运行 / d  Z# [9 W8 f1 n9 b5 e
  3. function hello(){
    ! P9 e0 {+ o- A  }9 F! j. N
  4. alert("hello");
    9 z0 Y3 J$ L  m0 y
  5. }
    $ o. c% {# R+ |7 v
  6. //使用方法名字执行方法 ' n% n. [9 N4 B8 X
  7. var t1 = window.setTimeout(hello,1000);
    $ W4 `. K1 g1 F3 s0 _  j. |
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 8 Z5 p3 l$ h# x& `4 M
  9. window.clearTimeout(t1);//去掉定时器 4 q1 W) K! u. k" v
  10. </script>
复制代码
2,重复执行的定时器 7 E9 u5 J0 P& y; q$ w7 I) t" ~
  1. <script>
    - ?! Z7 h! w, y* C+ A" b* K. @- g
  2. function hello(){ & c3 v2 N! r7 _
  3. alert("hello"); / L: t% a% S4 U  G
  4. } ) v0 S+ o# q3 R1 f& t& [* q- z4 o' Q
  5. //重复执行某个方法 1 x! \8 h' y' ]2 }5 ]
  6. var t1 = window.setInterval(hello,1000); . @4 ]6 f7 Z/ G
  7. var t2 = window.setInterval("hello()",3000); ' z: P: x, u+ N. J% c: x1 K
  8. //去掉定时器的方法
    / ^" S7 j2 ]* P8 _
  9. window.clearInterval(t1); % Y3 U# r& G1 }
  10. </script>
复制代码
备注:
0 n8 {. }* Y. h8 w' l' U" b
: l- _0 \6 U! n3 A8 d如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: + p5 f! O" \; z- [- \: I" m4 b
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
6 s$ r, U! H( Q  T( y/ h- D3 V" X7 ]& r3 j* i7 Z0 d& F

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
  d- D$ u7 Q6 i$ w: q0 z2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
" r5 T- ]' U7 X“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
  c, p2 J3 J2 E5 r2 u  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
; `, h3 Z% P* |: s6 Y比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,; v8 f) l5 l  K3 a' X! z+ m
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
& a( P8 z" \* {1 |" h( A" i: I比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
, h) H7 M' ]" z6 p$ Y& S6 B' L- VsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
% d4 o. ]: U- c5 j6 `5 i1 |setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
1 D+ E' D) _8 t: j2 b, X/ L0 }clearInterval(对象) 清除已设置的setInterval对象

略举两例。$ F9 E) z9 k( v% B6 {
例1.表单触发或加载时,逐字输出字符串

. Z6 O4 x  L3 k" ~8 \8 `5 G. V
  1. <html>
    ' b3 A. R8 l5 c& B; ]  C1 X
  2. <head>( r8 Q# P/ N7 |$ D( \* b
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />( o/ l' A# A% b7 L0 s
  4. <title>无标题文档</title>* M# N" V; C0 o7 [& e6 A2 t  Z% W
  5. <script language="JavaScript" type="text/javascript">, h  w8 q2 e. y8 d; e: h( ]( L
  6. var str = "这个是测试用的范例文字";
    1 _# X$ j3 o) J7 e4 `$ {
  7. var seq = 0;& N' x9 E& A7 y5 {8 [6 g7 F
  8. var second=1000; //间隔时间1秒钟
    8 f! d) D3 N3 E3 U' w
  9. function scroll() {! V  z: W" x$ S2 `2 f) |1 U3 Y# N
  10. msg = str.substring(0, seq+1);6 {% A  X4 m$ H6 Q6 x
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    5 L- F5 d1 C3 ?: ]( P% K" Q! h
  12. seq++;
    % H  ]$ y3 ^# l9 f6 R! l
  13. if (seq >= str.length) seq = 0;5 O& ?, d( ~1 t# N  i! K* D, ~% Y
  14. }
    ! ], Z7 j& A2 T/ f
  15. </script>
      `9 v0 k% ~- s- S9 b/ g
  16. </head>
    ! k% {: M; e+ |: d
  17. <body onload="setInterval('scroll()',second)">
    3 h  z3 n6 C1 O" Q$ |
  18. <div id="word"></div><br/><br/>9 T- m( B, W0 [
  19. </body>' }5 x2 @5 g# [% d% P4 ?
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
5 ~3 o9 f3 G. G2 y' U! }# T
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2 @; c9 c; O3 R6 w
  2. <html xmlns="http://www.w3.org/1999/xhtml">& `: v' b" V: @3 [( |) F* {
  3. <head>6 u3 D; v5 F7 g& J0 I
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 b: D; a1 E. X) U, P
  5. <title>无标题文档</title>: q; d, _# @( [$ E
  6. <script language="JavaScript" type="text/javascript">, N# _5 A7 g) ^* _
  7. var second=5000; //间隔时间5秒钟
    * d; {) Y2 N' R: I7 J
  8. var c=0;
    ( n! R3 }8 T6 h( _8 m9 `
  9. function scroll() {
    ( ^. w9 e7 |. X' E9 y0 Y
  10. c++;
    ; s- B- l0 U6 o! m
  11. if ("b" == document.activeElement.id) {: p  b& Q, Q6 `  B
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    7 g2 ?6 F" ?+ d
  13. if(document.getElementByIdx_x_x('b').value!=""){
    $ O% g$ i' ]! U+ B
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";5 M/ g1 V+ b# x5 F: r
  15. }. Z  {; ?  ~$ ?6 K0 x
  16. document.getElementByIdx_x_x('word').innerHTML = str;% A$ s( U7 Q1 t; \! r4 G* _, C" O4 D
  17. }
    & o% U# g3 x; [7 |& G
  18. }* Z. s2 C7 P& r  e
  19. </script>: e) v. L) s+ S1 Z
  20. </head>
      F5 f( l1 Y; a
  21. <body>
    3 B' Q' z; L+ c; W" |& |( [
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>& ]8 o, d7 Q4 A$ e9 J
  23. <div id="word"></div><br/><br/>5 r2 N: {# G. e( n& r# T! X
  24. </body>
    ( F* _' V1 D1 u9 \. b- ]) x5 c) J
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
" g7 ?7 T3 o" ?' ^- O3 n2 d( ]
  1. <html xmlns="http://www.w3.org/1999/xhtml">' v9 ?2 e# C+ d# Q$ o+ d
  2. <head>. c# ^8 Z! W7 C: T  R" d1 b/ L, _
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    7 W/ G3 w% a: A( T* l4 T0 [5 D, s
  4. <script language="javascript">, Z9 |" P; Q( G( O1 l
  5. function count() {
    0 ~3 x6 e' |% f" W! r! M  `
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    0 W7 n  C% e+ i/ w
  7. setTimeout("alert('十秒钟到!')",10000)
    5 t; D: Z! p9 q( s( q' b6 R
  8. }
    5 Y, R6 N; ~, D! H
  9. </script>7 [0 r; f+ B; c9 c5 q
  10. <body>% I) T8 P. W3 B7 j0 k
  11. <div id="m"></div>
    ! H6 n  }; z7 ^0 i- i# S
  12. <input TYPE="button" value=" 计时开始" onclick="count()">: j- S+ b* W/ c# |
  13. </body>: J* M; I4 ~) x( Q8 I3 n
  14. </html>
复制代码
例4:倒计时定时跳转4 r1 R( O+ g8 K. z+ g# {
  1. <html>
      x" J; ^' J; |  k4 r; `
  2. <head>
    $ I- x& q9 \+ P) l/ F* g& Y4 n3 M
  3.   <base href="<%=basePath%>">9 ^( n( z  `- t7 |
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    5 G. \, n: k; e: ]6 }
  5.   <span id="tiao">3</span>
    0 L8 c9 y& M4 M+ P5 H5 n; M- o7 z
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……* F4 w1 s, y6 V) q' B2 K  ]5 K# E
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    $ J6 D; S1 i) _% b' M! B$ J% ~
  8.   <!--脚本开始-->+ j0 O5 J: }4 ^# b1 H1 e+ D1 L
  9.   <script language="javascript" type="">/ I9 z9 C6 u" S1 Y' N8 `" H
  10. function countDown(secs){
    ) F: t, X7 n, F1 X
  11. tiao.innerText=secs;5 I! Y8 q/ E9 ^' i$ A
  12. if(--secs>0)1 t0 v7 l4 A( _4 H8 X. D
  13.   setTimeout("countDown("+secs+")",1000);
    0 n$ z! P: h) d, c
  14. }
    ; z; @2 X, c% ~; W# X6 D
  15. countDown(3);, i, b1 l! k4 [/ F6 x" ?
  16. </script>5 s3 e5 c! z! _( t8 {8 k8 o; W0 z
  17.   <!--脚本结束-->
    , C  P, D: Z7 |( I8 T) F
  18. </head>
复制代码
例6:
, c$ `1 w6 y9 j" Z
  1. <head>
    5 q- @# K) R& Z8 Y, @
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 5 _% Q8 W; J( R) `1 O& K7 p
  3. </head>
复制代码
例7:
+ S) D  W" x  ]8 H2 S
  1. <script language="javascript" type="text/javascript">/ }$ `* ?) J/ ^& P2 Q/ b* Y. W
  2. setTimeout("window.location.href='b.html'", 2000);
    , G- I' K/ w& r5 q6 @
  3. //下面两个都可以用
    9 O, `8 l; Z. i& R1 {( _! s
  4. //setTimeout("javascript:location.href='b.html'", 2000);9 p$ ?" d7 q) `. O6 a; i" U& m
  5. //setTimeout("window.location='b.html'", 2000);
    # S; `7 [! ?2 [7 N8 i; l; _
  6. </script>
复制代码
例8:
# I6 M8 I; n- l+ Y! e
  1. <span id="totalSecond">2</span>
    2 U, c- v4 o; n! F+ ^
  2. <script language="javascript" type="text/javascript">' d* R  p- B" E# J9 s' G( R
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    - k! D& w6 J( C* ?$ z
  4. if(isNaN(second)){7 o) U- T5 u/ p! s* D1 o2 A& B& Q
  5.   //……不是数字的处理方法) P% }9 q1 S7 b; u6 v: j  C* d
  6. }else{
    # v. ^  O& q( D2 h! m3 H3 [" u* m3 s
  7.   setInterval(function(){& H5 ?, H$ h$ O$ f) u" g
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    2 c3 F6 j  ?' u3 }& O% H! Q
  9.    if (second <= 0) {
    / V& K" k* S" O" v
  10.     window.location = 'b.html';
    , `! ?# U/ j# v! r
  11.    }
    # e9 p& D2 n! T' N/ W
  12.   }, 1000);8 o, g* |8 S% ?4 E
  13. } $ D5 P+ O1 s( Y. N
  14. </script>
复制代码
. d7 I% F6 S; s# o8 C7 N
4 W$ t! n" p3 Q! S" ^0 S
/ X  c# C0 Q3 q0 S! ]# q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 23:44 , Processed in 0.067103 second(s), 19 queries .

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