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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 # h1 d# x$ j$ Z' E
  1. <script>
    ) f  e1 g, Q/ d
  2. //定时器 异步运行
    ; Y1 }" p; K0 o, }( m
  3. function hello(){
    , j- D0 Q( i4 X" B/ M0 \
  4. alert("hello");
      j* }1 Z( `! V; Z
  5. } . y+ k6 A) @1 c3 m; ~% ~
  6. //使用方法名字执行方法
    + ]" o% E0 c8 ~8 N+ x
  7. var t1 = window.setTimeout(hello,1000); ; }! I3 i: t7 F
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    $ h6 Q7 S! \4 E. M2 A# R- o
  9. window.clearTimeout(t1);//去掉定时器 & [; D# O. L# Z2 A
  10. </script>
复制代码
2,重复执行的定时器
5 D  P% L" A2 q( B; w9 [0 |
  1. <script>
    3 v: d- j* Q- j0 {- t
  2. function hello(){ ; m6 R, _$ w- P* h# F0 z
  3. alert("hello"); ) h) Z% e' [- Z. ]+ W
  4. } ' O7 o8 Q& j; j8 M
  5. //重复执行某个方法
    4 l6 j% D+ S( d- |& N" A0 v8 \
  6. var t1 = window.setInterval(hello,1000);
    ' ^$ x1 l  u& W! W9 o
  7. var t2 = window.setInterval("hello()",3000); $ V- e1 p7 }& [0 _
  8. //去掉定时器的方法
    8 \) _& X& N% e/ `1 v6 l
  9. window.clearInterval(t1);
      ?5 m- t6 x2 z4 E8 y
  10. </script>
复制代码
备注: ( G' s: k4 f, r5 u& h& ]: j; K

4 P5 \9 l& ~$ d如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 1 A& x( n1 Z1 v5 L4 N5 E% q. R
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
5 s: k7 X; A  B* K' s
$ P% |4 Z( N0 G0 H! o, J% k7 Q+ w

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

1.倒计定时器:timename=setTimeout("function();",delaytime);. k, b! W3 o. N$ @! j1 v7 M
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成/ _* Q' g* t- T/ Q0 J
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
1 Q+ c6 J) }2 ~  ~' Z  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。  |6 s& S: C$ F% M
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
* ~& u. @4 Z6 X: _* K% }! C则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。, c1 v) Y. A$ }& S$ u) }  x% [
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。8 ?) t; G4 v0 y$ n/ L, X% k; y
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.3 N' q) X7 ]  e
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象: O5 q, {: O) S! Y
clearInterval(对象) 清除已设置的setInterval对象

略举两例。" d* v+ p9 r0 c2 w  k
例1.表单触发或加载时,逐字输出字符串

; S/ I) A' Z# [
  1. <html>7 X! M' K$ I2 w% y
  2. <head>
    : x  X+ |- F) M& Y
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />) D% a  V. J3 M# @3 K* T8 }. B
  4. <title>无标题文档</title>+ s2 j, P4 ^1 M% ~
  5. <script language="JavaScript" type="text/javascript">8 l: U! F8 k% ]: |* J% x
  6. var str = "这个是测试用的范例文字";
    % j' S) j9 P! S4 _3 a- k" j* q
  7. var seq = 0;4 X- l3 J0 o( g
  8. var second=1000; //间隔时间1秒钟
    $ T, ?4 z/ t* S
  9. function scroll() {
    2 ]) q9 ~$ Z  Z' E' o
  10. msg = str.substring(0, seq+1);" U2 ^/ f  Y6 k3 z2 z& N
  11. document.getElementByIdx_x_x('word').innerHTML = msg;4 W; y/ P1 Y- b6 l! {8 e
  12. seq++;1 q- l4 }# D" X1 w* r6 A( X
  13. if (seq >= str.length) seq = 0;( X& m5 x1 d: B% B
  14. }
    % y/ I6 q2 y. k* J4 [
  15. </script>; U! o) A$ y; r8 X/ A' u
  16. </head>& q2 o% @- u' W" F9 f7 E* B8 E7 d, I0 t
  17. <body onload="setInterval('scroll()',second)">0 y1 P. X5 ^. e0 l
  18. <div id="word"></div><br/><br/>
    5 w0 P" [( U6 I5 _
  19. </body>
    4 [$ y8 t0 O7 P& |; t, z
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
6 n  k0 H' g" @9 j
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    8 Y* ]+ v, E- N7 W: t/ w, e4 M
  2. <html xmlns="http://www.w3.org/1999/xhtml">7 P. l7 X. D7 ?+ ~& u. \
  3. <head>
    8 P  r% `2 |" v5 U' T6 M
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    9 H/ a2 G- w6 J7 h5 M
  5. <title>无标题文档</title>
    " }* Y: N, R' N; H4 O- X
  6. <script language="JavaScript" type="text/javascript">
    4 c( I% H1 ]. v
  7. var second=5000; //间隔时间5秒钟
    # {2 h; Y5 g9 g: b0 y0 b
  8. var c=0;: I) N- w6 u! c% R( m
  9. function scroll() {* W7 e/ E4 i# Y. k' ]: v0 ]
  10. c++;
    0 `1 r' c7 k- H! v6 u: h& G2 \
  11. if ("b" == document.activeElement.id) {
    7 i; ^+ x9 O0 _6 }5 K9 h
  12. var str="定时检查第<b> "+c+" </b>次<br/>";! y0 ~2 n! z: I
  13. if(document.getElementByIdx_x_x('b').value!=""){
    " E9 c, X% U- d/ v% N; ?
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ' T! ]+ A; @: L& U. z) f
  15. }1 \9 s: u! F, D
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    4 [, l7 |' Q" W  v
  17. }% N8 G+ d+ Y9 I; m  V5 B' |0 N1 m
  18. }
    : ^% J$ P4 A& V& D9 U3 w4 M2 Q- p1 U
  19. </script>
    0 l) P% g- X: X3 U  _0 p# W0 q
  20. </head>
    6 I! N  X  t: p# O0 T, ]( p9 ~
  21. <body>
    & f' L7 B1 S* I# a9 ]  a' K
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    4 f/ C2 P  n' L+ r" k- z7 U
  23. <div id="word"></div><br/><br/>
    8 a* [; }, d4 ~2 X6 W7 H, e) c: T( t+ M0 c
  24. </body>( l4 J% ?2 b# ?% w9 _
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。& U% Z- d5 ?3 G: o( a; ?
  1. <html xmlns="http://www.w3.org/1999/xhtml">9 a* g+ ]- K' }
  2. <head>6 P' t; r! _! w4 U. O
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />" `5 L+ f* |9 f# z- |
  4. <script language="javascript">5 A7 T5 d) ?# j/ h! N( U) E
  5. function count() {: t! r0 W$ n. U1 ^
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    7 I9 I6 ~5 Q! K' E, D# o7 Y3 u! z/ j
  7. setTimeout("alert('十秒钟到!')",10000)! B8 Y% E- l% x: R* g' f* N6 i
  8. }
    ; P  O* @* t3 M8 s1 ^
  9. </script>
    ! U" d5 V4 ]# a
  10. <body>- @. R: ~8 k5 t. O" [2 e. Y
  11. <div id="m"></div>
    4 l$ y3 ]% `+ _5 j
  12. <input TYPE="button" value=" 计时开始" onclick="count()">+ W2 l( \% F' C4 o
  13. </body>$ p9 Z6 a0 d0 j1 n/ ]' l% c
  14. </html>
复制代码
例4:倒计时定时跳转
2 w4 L6 G' w# U' H
  1. <html>
    / U+ A% k( M8 C$ d( N. z
  2. <head>9 `% B  t- Z  Q% V
  3.   <base href="<%=basePath%>"># b" Y) G  `' T0 T# H7 ]% e
  4.   <title>My JSP 'ds04.jsp' starting page</title>& S5 ^2 W- k3 O+ K- x. v5 k0 h
  5.   <span id="tiao">3</span>
    # W: t9 s2 z3 d  u( i
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    8 J5 p3 H+ d  P8 @
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    - ^8 r8 s6 R1 s- C$ O, ^
  8.   <!--脚本开始-->* Q- Q' `' A4 f6 k! p6 |
  9.   <script language="javascript" type="">
    ! H8 H  P5 T, W# V
  10. function countDown(secs){. p! J" C- L9 `- g" i
  11. tiao.innerText=secs;( q* [- ?6 |* }* L
  12. if(--secs>0)
    2 l4 {# j  v3 c, l0 j+ Y0 Q1 U
  13.   setTimeout("countDown("+secs+")",1000);
      Z$ ~$ Z: ?: C* \1 Z5 k) z& o7 M
  14. }
      `  F+ K) J0 O# Y" K# z- C
  15. countDown(3);
    1 C. v. I% r* H/ ^: g- d
  16. </script>
    ( t2 i) `0 ]- T9 S# O) N% I* x
  17.   <!--脚本结束-->4 R: D% y4 x, |
  18. </head>
复制代码
例6:
  M# _. k! [- E1 m9 F
  1. <head>
    * p" \6 A3 _" m
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    8 X5 e" Y9 z1 S/ Q6 C9 J
  3. </head>
复制代码
例7:% E) N+ e. [4 ^
  1. <script language="javascript" type="text/javascript">
    1 _( I% ~6 }% N2 R
  2. setTimeout("window.location.href='b.html'", 2000);- Z8 R& r% G6 @5 \$ M/ f+ j
  3. //下面两个都可以用
    2 ~( I4 B7 x% d2 F! D) H
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    3 E- k3 G' J/ O* C7 i4 t/ j
  5. //setTimeout("window.location='b.html'", 2000);
    . s, E1 Q8 f; I) T! c. E
  6. </script>
复制代码
例8:0 L9 ?; a- i) w
  1. <span id="totalSecond">2</span>6 h" J! o4 W) `, p; ?5 P* c
  2. <script language="javascript" type="text/javascript">( ~0 `$ @# F  U6 {
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;, O4 w' ?( ^4 o3 [! k
  4. if(isNaN(second)){6 f( o& U  M0 U- |
  5.   //……不是数字的处理方法% w8 o; v) t* r
  6. }else{$ Z* O+ e9 s- e. Q& k% }3 N: W( x
  7.   setInterval(function(){& Z' [6 A- D0 e9 ~, r
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    ! E% L/ w9 v! X' I, x
  9.    if (second <= 0) {* D) q/ s; ?4 R8 A+ c3 F% S" \! v
  10.     window.location = 'b.html';
    0 U( ^( ^5 V, e5 g
  11.    }
    ) i' e. z1 E+ x/ \% ?7 a
  12.   }, 1000);) M' O  m- p: \0 X, c  V' |
  13. }   c+ N5 x7 ?* \* h5 |2 n. n0 j
  14. </script>
复制代码
: x5 O% `7 T0 T) X) k

& Y% _3 j: o, @$ j9 \' b0 f/ ^; j& y% z2 ]7 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:08 , Processed in 0.145352 second(s), 19 queries .

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