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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 4 I4 }: C6 B& A' O
  1. <script> ! X/ `5 }. U; I% e
  2. //定时器 异步运行
    7 x% v5 w! h! X& ^0 H
  3. function hello(){
    8 N. d6 s1 c) [) X# k, Y5 v
  4. alert("hello");
    - ^  L) Q! n1 B2 o; @, _! w
  5. } # K6 v% P% c; G, H
  6. //使用方法名字执行方法
    / c" A4 w1 L! K  W3 i
  7. var t1 = window.setTimeout(hello,1000); 7 V5 S- f  {% Y# I5 Q: ?' M
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    : \9 N# q; k$ o: B1 A
  9. window.clearTimeout(t1);//去掉定时器
    - H' D4 {( j1 X( V
  10. </script>
复制代码
2,重复执行的定时器 ( T4 {. E( a" D) ~, l- H' S: s
  1. <script>
    $ b7 |. Y; H, w5 x9 T! K2 J- ]
  2. function hello(){
    4 {! Z6 T! V2 V6 f0 V" ?
  3. alert("hello");   r7 V- P0 v5 ]
  4. } , Y# ~, f* s! }, [. G
  5. //重复执行某个方法
    $ h- R" o4 G  ^' Y" X* }
  6. var t1 = window.setInterval(hello,1000);
      k$ V2 B" K& k: t
  7. var t2 = window.setInterval("hello()",3000);
    $ _7 S, e) U* O6 ^- t
  8. //去掉定时器的方法 7 ~# R0 \2 @: N# J' @$ P
  9. window.clearInterval(t1); % j; ?  }% M* Q
  10. </script>
复制代码
备注: & v3 w9 s7 b% N0 ^
, d/ w" n6 u) t' o
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
* w! \: d; {8 ~: `8 G) n( X4 q& z可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。$ V5 F* Z1 x' V/ Y2 s

% c6 {2 L* q4 [* [: P# {% W

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
5 [* i. X1 ~" W" Y* H2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成( C7 q5 Y7 l4 r$ B1 e- A
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。0 b; e5 K4 j% E8 e) ~& ~
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。! \& b% U6 r/ ^2 B0 X& ?
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,1 v1 Q( a, l  N1 b
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
8 q" f1 l9 y% f8 S( q/ j0 S比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。( E% H( h( J0 Z# b# S* Y$ R  F
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.- ~7 H- T4 ]. C& s
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象3 h5 H4 G+ ]& E
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
8 L3 h# b$ S( F例1.表单触发或加载时,逐字输出字符串


5 ?( V, @7 \- ?" @6 h
  1. <html>8 L9 p. J& p0 ^- @( Z- D
  2. <head>6 h: N1 g7 g( G$ _% z% C
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />- k, ?; A* a) @- A& b
  4. <title>无标题文档</title>: J3 r3 o3 F+ J7 B2 B" ^* k% y
  5. <script language="JavaScript" type="text/javascript">6 l0 I" F5 k4 |& W9 A
  6. var str = "这个是测试用的范例文字";
    / e% M- i/ d/ k7 Y  J
  7. var seq = 0;
    # _9 H9 e) ~  Y+ K
  8. var second=1000; //间隔时间1秒钟2 Q4 p  R) c2 D
  9. function scroll() {  t/ D) ^" w* A
  10. msg = str.substring(0, seq+1);& x0 ~2 M) [* {5 o$ f  q
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    6 G! k- ~. K: V0 f
  12. seq++;
    9 H& C# p' T* T1 u4 i; r$ M
  13. if (seq >= str.length) seq = 0;
    8 ?( U0 j' K) `, L
  14. }' T3 _$ T" y: V6 c
  15. </script>
    ( v) J; i4 r. p$ {
  16. </head>
    ; u1 i: u  f; h
  17. <body onload="setInterval('scroll()',second)">
    ; a" E( m/ y, H. b! B5 y
  18. <div id="word"></div><br/><br/>
    9 {1 Z; U# A8 }, [, @( K
  19. </body>
    . ~  C- D% h5 q
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
; o0 Z' [$ M, Z: ~
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">. |" h' E9 n7 J3 o, U/ D
  2. <html xmlns="http://www.w3.org/1999/xhtml">8 ?5 D. V9 C; K* r. g. f. q3 r
  3. <head>
    ; v1 h  K8 c$ u# t( X2 u+ l" u
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! m0 ]2 {: W0 U5 N/ B3 x8 T! [1 l
  5. <title>无标题文档</title>3 b3 ]* I  E* F% h2 _7 R
  6. <script language="JavaScript" type="text/javascript">3 y. F- o% V1 r  x: b" z
  7. var second=5000; //间隔时间5秒钟: @0 A4 J5 x- |% M/ d6 E: p
  8. var c=0;1 x" Z( `$ H6 B, s5 [1 D5 u
  9. function scroll() {2 `1 ~4 w4 V- H/ W& V( O- u
  10. c++;
    8 C0 h5 k7 M- w( v4 i
  11. if ("b" == document.activeElement.id) {
    / r& E4 [8 l1 I" I2 _8 ^6 z
  12. var str="定时检查第<b> "+c+" </b>次<br/>";7 [$ [8 b1 q9 ]
  13. if(document.getElementByIdx_x_x('b').value!=""){
    7 {& L" t, M- H" O( P# ?# M
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    5 M9 P0 v9 f! ]( w/ T
  15. }
    % s- z* \3 g* K$ _
  16. document.getElementByIdx_x_x('word').innerHTML = str;4 F; m, ]- q5 V- ]; O
  17. }
    & l8 }& i  V  N: ]# ^: Z
  18. }; [: W7 v/ X: T
  19. </script>; |# x( [" I9 ]& B/ K
  20. </head>0 S- T4 E2 T! ?
  21. <body>; P( ^% [  ]+ H" j1 W2 e8 c
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    " L, e0 ]# v3 \  v$ D& |  \# y% @; }
  23. <div id="word"></div><br/><br/>
    2 ~; o# V+ q- r! f5 w
  24. </body>- b* C- s1 T3 B' M8 B
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。% m& ]7 C) ~3 `9 W
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    1 G+ i! \. O/ Q3 ~$ w
  2. <head>
    6 r1 R% f* o" Z: ~
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ) R1 I: w; a& a" F# `1 D
  4. <script language="javascript">8 [+ c; e: v- _
  5. function count() {% a/ C+ s4 b, _* q( @& s( n
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";+ o$ E0 g  N2 s9 g5 v) x0 |+ H
  7. setTimeout("alert('十秒钟到!')",10000)
    3 j: |2 k) Y: P! a
  8. }/ ^. {6 O# d$ f% s, P7 c+ M) D7 I" u
  9. </script>! I5 R0 Y# U% z' N
  10. <body>
    ( w" G% Q1 F& B
  11. <div id="m"></div>* A4 b( t; M1 V& H" G$ I; C
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    5 P0 d+ Z- R  p3 _4 d
  13. </body>" u9 C! h3 [' L
  14. </html>
复制代码
例4:倒计时定时跳转
# R2 ?5 _: i' ^" N! p0 p/ M
  1. <html>
    : s8 E* q' F, @6 s" Q
  2. <head>
    * J) |, r/ h1 W8 S) P3 ?# D2 d
  3.   <base href="<%=basePath%>">
    ( ~! |) F1 @% I8 m' B" D: Q
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    $ H, R2 k) m+ X8 \. f) [7 g* ]% k
  5.   <span id="tiao">3</span>
    2 F+ y4 _5 a6 D9 H$ A) K
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……; f" N/ L5 ~9 D4 G' n- {
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ; Y) P( B8 j& a
  8.   <!--脚本开始-->
    7 W$ ]2 N+ l7 u# I& b8 |* {: z8 b* a- D
  9.   <script language="javascript" type="">  |& n+ }) O0 h: f; @! J
  10. function countDown(secs){
    3 k. t+ ?' O) U, X0 n/ B) Q
  11. tiao.innerText=secs;
    ( r8 z- a7 A' }( D  |' m; @: \0 {
  12. if(--secs>0)
    6 _. w& K4 x+ j/ k  a$ F& [) H
  13.   setTimeout("countDown("+secs+")",1000);
    - V# t) r. }/ C5 O
  14. }
    . D/ S/ A. ~5 t1 |
  15. countDown(3);- x7 a$ m) E( g
  16. </script>
    0 R+ s1 ?# k& F, g& q' I
  17.   <!--脚本结束-->
    & \) o2 C1 D, Z
  18. </head>
复制代码
例6:; |1 N0 ~1 J$ z% v0 I
  1. <head>
    5 p; t1 ?* X- }9 S) h
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> : j4 C: f0 `/ X9 j" K% b& Q* L1 a$ L& u
  3. </head>
复制代码
例7:! m0 A# t! `: d- q& F: F
  1. <script language="javascript" type="text/javascript">
    # ^, I. w2 _2 t% s1 P( C
  2. setTimeout("window.location.href='b.html'", 2000);! d& {: I+ T; `: o  k; T; _$ C  \4 h
  3. //下面两个都可以用
    $ ]  p# y9 Q. A& Y
  4. //setTimeout("javascript:location.href='b.html'", 2000);  }# Y) L$ u# C! j, D
  5. //setTimeout("window.location='b.html'", 2000);0 w% R1 f' J* m9 {6 f2 j
  6. </script>
复制代码
例8:7 Y8 l- \$ v" Q8 M+ G% L
  1. <span id="totalSecond">2</span>) X, M5 L/ r6 h
  2. <script language="javascript" type="text/javascript">
    & R" v4 a) y1 C5 m
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    1 K+ E! F8 t( q; k
  4. if(isNaN(second)){
    + j+ r+ |; y8 l1 G0 k2 l# i( f
  5.   //……不是数字的处理方法  Z: H* W/ F( P1 x/ a1 k  r
  6. }else{
    - _) w/ E# X- a' c8 k) A% p
  7.   setInterval(function(){6 z: E3 `/ n0 ~. M7 d$ |* \" _
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;9 O/ ~5 h: h4 F
  9.    if (second <= 0) {
    - T* N% c" z4 G; j+ H% ^. m
  10.     window.location = 'b.html';  l7 p' ~& k/ p
  11.    }
    $ I' O$ I( B: c" w4 B, \9 w6 ~( }
  12.   }, 1000);/ h, M. C# t) L5 P7 L+ ?
  13. }
    + v9 {  q' u5 g9 T6 c' X
  14. </script>
复制代码
4 q' n* `- R. A, _/ z5 A

4 W) B( D  e: x1 Q& ?
) W7 y# Y* X) \  w' d  a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 05:00 , Processed in 0.121747 second(s), 21 queries .

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