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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
5 O2 _4 \: W# F. H% l8 }
  1. <script> 0 }4 D& o# }) Y/ v! m
  2. //定时器 异步运行
    / |9 a' A% a% n
  3. function hello(){ . m0 G% g6 C  }
  4. alert("hello");
    ; |- L( _, x1 i
  5. } " @4 b6 }) H2 X) K6 G
  6. //使用方法名字执行方法
      `6 _; p, ~+ S$ X- j
  7. var t1 = window.setTimeout(hello,1000); ; I! F: r& V) @
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    6 c7 P. J  s4 L- K0 g) j( O: o, ?
  9. window.clearTimeout(t1);//去掉定时器 , P# B+ E- y9 e3 C7 R
  10. </script>
复制代码
2,重复执行的定时器
4 W$ N, E* B/ h; ?8 ~4 f
  1. <script> , G- e9 w, p) {( h, L) K+ Y
  2. function hello(){ ! G6 `" w* F% f& I/ T! g
  3. alert("hello");
    , l. l4 U- K4 K: N
  4. } : r1 c5 ~2 [5 Y# m( x3 c, R
  5. //重复执行某个方法 % ^. @6 B% R& f3 F/ f4 a7 u
  6. var t1 = window.setInterval(hello,1000); 1 H8 h* \7 e4 z& a+ q8 ~$ S/ `
  7. var t2 = window.setInterval("hello()",3000);
    ! F0 ?5 E/ Q: W4 x
  8. //去掉定时器的方法 : h/ m) ]# D3 m' B+ I* S. U# A+ B( L4 h
  9. window.clearInterval(t1); % B, Q7 ^5 i( Q
  10. </script>
复制代码
备注: 1 d- w, X/ {- K/ O7 M) @

6 b' j% s; }* H1 [/ O  L: T如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
# U( Q( C: y, J3 W可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
1 V( Y. c, [+ T" e% _4 R2 j. @
! M. z8 z0 F& Q

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
5 F* W- A& I+ }( k8 J2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
* o+ _) {" P2 V. M/ u" y“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。5 J# A' Q0 m0 n6 @
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。8 _6 W" e+ t0 K& g" |; B( X. ]( {# I# d
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,5 A8 m5 V) V! t/ j2 L$ \% x9 G! n
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
! y! v7 Q+ D7 s' d8 O9 U3 y比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
  Z+ ]2 a2 Q* E; N& v& \! i' ssetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
/ w" Q5 s: f/ F8 FsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
  ~  P- D. s" W. ~6 DclearInterval(对象) 清除已设置的setInterval对象

略举两例。& i6 u/ ~1 Q4 D' ~* v3 z, B4 a4 R
例1.表单触发或加载时,逐字输出字符串

. Z8 {! @* c( S
  1. <html>
    * l2 O3 [5 Z/ J  u8 u
  2. <head>
    $ d# [; H+ h# M4 J/ x  O
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ) |6 t$ q5 ]7 N' G2 U
  4. <title>无标题文档</title>& ^8 g! ~2 u3 @
  5. <script language="JavaScript" type="text/javascript">+ X: D' L  a6 T% T* \% b" A
  6. var str = "这个是测试用的范例文字";6 o3 e% v' q$ f$ _7 h$ s
  7. var seq = 0;
      S  w. H& U' ~2 x; e- F) B) L
  8. var second=1000; //间隔时间1秒钟: n! N7 m9 Y7 ?# R9 K4 z6 c! \7 t  O; S
  9. function scroll() {
    / n5 I- N) J5 k6 U
  10. msg = str.substring(0, seq+1);
    $ H" k* K+ G* w; T- l0 [+ {% `
  11. document.getElementByIdx_x_x('word').innerHTML = msg;- d) s) n7 S; L/ P
  12. seq++;
    5 g0 F7 |9 }( e$ y
  13. if (seq >= str.length) seq = 0;
    & T  @8 E! J) _% g% D' |
  14. }
    5 U. o4 L/ w, x  h& k2 n
  15. </script>
    , M$ k" u1 v* \" E7 d& C; B1 }1 F
  16. </head>
    # E! \' w, A' n) s: l5 {
  17. <body onload="setInterval('scroll()',second)">
    # Q8 h6 B. P) L; X
  18. <div id="word"></div><br/><br/>
    " i) W% B9 k. D2 L; e4 k
  19. </body>
    3 O! ?; H, h$ {& d+ w, B; t& R
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
. M; r' H3 _, \* P% {
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">8 k& O/ I: h* v# o+ L
  2. <html xmlns="http://www.w3.org/1999/xhtml">. b5 s& R* {7 W. O/ D, S
  3. <head>( F/ e$ ~, M1 I# Q6 w
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />9 n6 Y$ u+ E, E! d
  5. <title>无标题文档</title>3 z+ G* U4 O# F. M$ _% p
  6. <script language="JavaScript" type="text/javascript">
    * K9 j( d2 b0 N0 i6 _- f" V# m1 s
  7. var second=5000; //间隔时间5秒钟$ U% m. K) t2 @
  8. var c=0;) d) F( P5 A2 w, G
  9. function scroll() {
    - x, \% d# C) q5 ?; y$ ~0 Z
  10. c++;8 ]" v6 e& w3 p: i8 ?) v8 e
  11. if ("b" == document.activeElement.id) {
    : A& S" D: z+ ^. u
  12. var str="定时检查第<b> "+c+" </b>次<br/>";1 u/ i- s9 p% U' B9 C
  13. if(document.getElementByIdx_x_x('b').value!=""){
    0 }* W! }( |  w9 M
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    . X  _9 N3 x3 W) {/ V
  15. }
    ! T4 O3 @$ |9 [$ D3 J9 h
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    % t: E3 g& n6 v( [, L) {; Y& t
  17. }
    & t1 [5 f- B  B1 F# m# m8 q9 @0 w
  18. }
    ) ~) {8 C/ i! @) T# s1 j$ q
  19. </script>
    ; Z, _* X1 J$ X7 y+ }3 H; |
  20. </head>8 W  f8 S! ^1 v. {$ a" o+ M
  21. <body>$ D/ {9 M6 n# w3 V6 X8 ^+ W
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    / w+ X" \7 k6 q2 _0 Y
  23. <div id="word"></div><br/><br/>( R; ]* C- i+ _4 D
  24. </body>3 |) Y- ^% e' H7 {6 M! V. t" V
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
1 H' `: l. N; D& j" Z* J; Q
  1. <html xmlns="http://www.w3.org/1999/xhtml">3 p6 E  l& w8 e9 \' j
  2. <head>
    3 I5 N3 n/ V* ?' [
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />* k1 d5 `( T+ H0 Y* i
  4. <script language="javascript">
    5 a  H0 `! {& [/ y4 R
  5. function count() {
    * c+ P; w5 G5 K. X, c+ Y# S
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    # F8 T7 G" l( _& F, Z
  7. setTimeout("alert('十秒钟到!')",10000)
    # e+ |- I+ [) r
  8. }
    ' h( b5 M" m2 Q" O, A
  9. </script>
    * O+ |8 `$ c. N. s
  10. <body>
    & z0 `- D2 O' d$ @/ K9 P- o; _) E
  11. <div id="m"></div>9 H  M1 a! n3 D" i5 Y# |; m3 d
  12. <input TYPE="button" value=" 计时开始" onclick="count()">0 ^9 V; a  G# h# x7 Y
  13. </body>
    ; y  L- D& ?, n1 h4 ~2 I6 z3 \
  14. </html>
复制代码
例4:倒计时定时跳转4 R: F9 l& Q$ g7 g5 J
  1. <html>
    . @! j+ t; F/ S3 B0 D
  2. <head>
    0 l: }5 B$ K8 q7 F& Q
  3.   <base href="<%=basePath%>">
    $ W! w1 T* q' M* j. u4 {
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    8 f9 w' |  r6 ]6 y! G/ y8 ?6 k
  5.   <span id="tiao">3</span>
    # F, ~+ ~0 Z. D/ ?
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    - L8 t$ {& }! V9 m5 x0 o8 I
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>5 Z: ~$ Z; L9 L4 K+ R) |' Y; c1 P
  8.   <!--脚本开始-->
    # R3 p, u5 @/ s. Y1 o! e7 Y
  9.   <script language="javascript" type=""># _! I6 j6 B( W9 W' o2 c9 d
  10. function countDown(secs){7 l$ x" f  Z8 g5 U
  11. tiao.innerText=secs;
    * Y! ]9 g7 _. x' y/ m: D
  12. if(--secs>0)
    , x" W+ h: U( L2 Z/ |2 a
  13.   setTimeout("countDown("+secs+")",1000);
    , V0 S0 o" B  K$ \4 x! j: [
  14. }& t* J7 h* J/ T1 A( [! x
  15. countDown(3);; S9 j1 O3 z: w% H: w$ i
  16. </script>
    * Q0 L! c6 o2 Q- a7 D$ M/ D! \
  17.   <!--脚本结束-->5 L- Q! P& D2 Y* S( c1 V
  18. </head>
复制代码
例6:
) @7 X! j/ X9 M! T3 ]: M
  1. <head> 0 d1 R0 g. |9 T- w* p3 D
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    * j& Y$ e/ s5 A' T
  3. </head>
复制代码
例7:
9 D7 g3 ?- ]$ e) {6 B
  1. <script language="javascript" type="text/javascript">( Z0 i. `2 f. V* A3 W8 h
  2. setTimeout("window.location.href='b.html'", 2000);
    9 D: P3 H- a# E2 |( k
  3. //下面两个都可以用. \3 d, N/ t% `6 U+ [+ G2 _
  4. //setTimeout("javascript:location.href='b.html'", 2000);6 ~% Z0 O7 y' @; N
  5. //setTimeout("window.location='b.html'", 2000);
    5 y) I7 ?% i- J$ ^' d% V2 M
  6. </script>
复制代码
例8:
; v9 _1 a/ m. N& G; P: S/ X. t; g" D
  1. <span id="totalSecond">2</span>
    7 w5 a; D4 K! K8 L8 W7 h( i
  2. <script language="javascript" type="text/javascript">
      T7 L* W$ p* @; o! T2 s
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    % Z  \6 \$ w2 ^) m
  4. if(isNaN(second)){* g: P) S8 ^0 L# }
  5.   //……不是数字的处理方法
    ( Z( z% t  K, r6 i  [
  6. }else{" H# A2 [3 v+ C' c$ ]+ P$ l! \
  7.   setInterval(function(){4 @# c' W; ?: f+ p/ W# S( u
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;2 i+ Q8 F6 x6 E4 ?
  9.    if (second <= 0) {
    ! [4 d/ G8 P% L7 K# R1 ?! z& R
  10.     window.location = 'b.html';) @; @* U, z+ x* E7 x
  11.    }
    . b, V# Z: v1 m. ~
  12.   }, 1000);
    8 x& V: A/ Y8 x9 w( p
  13. }
    & I8 ?+ ~, j# m5 Q) |( u, Q
  14. </script>
复制代码

4 U2 I/ [  U. f9 g/ y& z' ^& `7 N% {3 f  z3 p( W: d
; N+ h/ E) B) H2 w- C% B5 h  }2 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 07:02 , Processed in 0.103452 second(s), 19 queries .

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