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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 3 Z! @. F5 P* M
  1. <script> ' Y) L& `; H: s; E; `
  2. //定时器 异步运行
    0 T: G3 I  e1 @2 @4 q. F* {
  3. function hello(){ ) p0 s+ o) C+ @
  4. alert("hello"); 9 X/ i# x6 D) a: v( C* l, O
  5. }
    6 J5 F5 ~8 N% N* b
  6. //使用方法名字执行方法
    : L; w2 e% E! ~0 r9 P% a& D
  7. var t1 = window.setTimeout(hello,1000);
    * P$ F" N8 b9 j* ]+ c
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    $ \# z! P9 R+ n: ^
  9. window.clearTimeout(t1);//去掉定时器
    ' O' d  {1 N. O2 `4 ?0 N6 Z
  10. </script>
复制代码
2,重复执行的定时器 ! m& F8 k% K3 Z- W2 h% o
  1. <script> $ x' i; T4 b3 B2 q
  2. function hello(){
    2 ?# l$ @# R& f# {' E7 i) l7 a
  3. alert("hello");
    6 m4 z9 V: l( F, t; [
  4. }
    5 E1 L0 n% }5 V! n/ i
  5. //重复执行某个方法 + T4 g6 O" O- G
  6. var t1 = window.setInterval(hello,1000);
    2 Y- P5 f. N$ p% E6 X  L
  7. var t2 = window.setInterval("hello()",3000);
    ! S1 Q2 j1 m; ]8 O1 l
  8. //去掉定时器的方法 : O. `* q( d& O9 x, g" o
  9. window.clearInterval(t1); + }) L. B  G: {( n) y
  10. </script>
复制代码
备注: & N1 N) N; H4 n  {( Q
1 g4 Y; e3 x7 I. I# ~) z& `
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
. e) y) g! G$ k5 h3 W可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。3 X( ~" X5 z8 |# O5 P8 [
/ _6 F9 o2 |4 b0 D% k1 O

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
7 z, C. n! B& B' y) f2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成9 d4 y1 r/ N% N5 k
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
; p0 B7 G# K+ u$ o/ z% Z% O  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
' c' z4 o) l* G' c9 K4 D3 K4 N& i比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
; U2 W" L" Q4 x+ f% H# D4 Z; g则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
3 X9 u3 @+ l5 l5 H2 v2 H- e比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。/ k' T; u7 y5 h/ T1 ^* g* A1 o
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
- F' g% ^% G1 Z# ]setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象1 i% l  X3 n: Y8 r- l" R
clearInterval(对象) 清除已设置的setInterval对象

略举两例。6 W  [* x$ T. |1 \! e9 w* s  |8 B
例1.表单触发或加载时,逐字输出字符串


! Y8 w9 ?$ z) X9 W
  1. <html>
    5 i  F& O, p- ?, t
  2. <head>
    - f. c9 Y! |. U1 x( W6 t* V
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />- r' e0 n6 i3 g6 X. |5 f
  4. <title>无标题文档</title>/ x% c5 J6 Y* `
  5. <script language="JavaScript" type="text/javascript">! d3 q) g1 S  V& C+ V. B. m5 p6 u7 w
  6. var str = "这个是测试用的范例文字";9 u/ ?4 c7 s+ |% k; u3 Z# Y3 C$ B
  7. var seq = 0;
    0 t' x& R# l6 l; d
  8. var second=1000; //间隔时间1秒钟  m. }. ?2 O, b: \0 x
  9. function scroll() {) `/ V2 [2 m  d: j8 j$ D
  10. msg = str.substring(0, seq+1);
    7 h" h; f: q& p  {
  11. document.getElementByIdx_x_x('word').innerHTML = msg;' s# q! {  B* Z
  12. seq++;- d; D9 `3 g% y# S
  13. if (seq >= str.length) seq = 0;
    7 ~- w# B2 H' x0 m" R
  14. }; a4 R$ ~8 c2 n- B1 J' i4 l" d3 z
  15. </script>
    , W# d# }) E0 z0 @0 c
  16. </head>
      Q8 N7 T9 ^5 I( n8 ?& d, w# a; I2 s
  17. <body onload="setInterval('scroll()',second)">
    2 @2 @4 |, S* [% ?) C
  18. <div id="word"></div><br/><br/>
    ( O! q& @. ]- s
  19. </body>4 {7 G5 }! w: B  K2 t
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。" y  p# l5 t8 @, ^
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">( y9 W+ R7 \# j+ q  M5 R
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    # I; j8 L% W( @' `
  3. <head>% B- R3 a9 {) j! R
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! R4 ?4 Q, V+ F8 e
  5. <title>无标题文档</title>
    % `* D) B( J3 s) e; ~
  6. <script language="JavaScript" type="text/javascript">/ o# D. u1 b! `9 C$ W7 U/ x
  7. var second=5000; //间隔时间5秒钟
    ' [; `% i# R5 Q# c6 f; o, S
  8. var c=0;# F; \1 S/ k; J" E. u
  9. function scroll() {
    + R$ ~  ?$ u! F5 n5 p
  10. c++;9 B- B% l0 ?( I9 d7 m3 U/ p$ e
  11. if ("b" == document.activeElement.id) {: v- G) s* ~+ g# I4 d' P
  12. var str="定时检查第<b> "+c+" </b>次<br/>";) Z4 ?% T5 e/ n( H* `
  13. if(document.getElementByIdx_x_x('b').value!=""){
    9 ~3 g/ ~2 x1 |$ k) A
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";$ t. g% K7 V/ e6 Q4 b% B) X
  15. }
    5 e* w4 T, t  E: U$ a6 D$ ?* P; z# \3 c! U
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    1 ~$ m# Y4 ^2 ?0 x/ y
  17. }$ S8 {- d# ?( P, H9 ^
  18. }
    ( I# W0 H+ B' x, v' T$ G$ b+ l
  19. </script>4 W( P. v8 z* P3 u1 a* A; c4 ?( i
  20. </head>
      j- _2 W# [. [  B# Q6 ^
  21. <body>/ C" ~. n; H$ z' |4 l9 a$ O: h
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>$ X' \  f2 ~# Z& }, J
  23. <div id="word"></div><br/><br/>  n; {5 M$ a7 T' a
  24. </body>
    2 R& d- k( N6 j; ?7 i) ~' c" B
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。8 H8 D4 ~* }+ B
  1. <html xmlns="http://www.w3.org/1999/xhtml">' ?/ V& I3 ^/ s' r/ d0 p
  2. <head>
    % [$ e8 s4 R* g
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    6 O/ k* x$ N! E7 T
  4. <script language="javascript">
    ; G$ a5 J; J/ [0 K: @
  5. function count() {8 S/ b: G6 ^* `% R+ V% E( P- j
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ! \/ D3 b1 y4 S, d: u
  7. setTimeout("alert('十秒钟到!')",10000)+ }7 w& g# A4 f2 i5 g+ ?$ ]0 u) v
  8. }1 o8 `) @" F2 X% `8 T3 Z
  9. </script>
    ) T! b1 T) x0 S3 h
  10. <body>% G- q% v& M+ q
  11. <div id="m"></div>) G% ?: ]! ~) `5 X5 i  Z% q& u
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    0 H0 v" B  b2 w1 Z
  13. </body>
    ; P, Z; N  w8 u. \; o5 |
  14. </html>
复制代码
例4:倒计时定时跳转
7 U$ [/ z/ n' ^# J3 S% e
  1. <html>
    % H$ m3 q8 T8 u3 ]0 i
  2. <head>
    . q' H* ^$ R$ e. d8 I+ F: g; V
  3.   <base href="<%=basePath%>">
    + H$ f( I; ]" l: \8 T6 t
  4.   <title>My JSP 'ds04.jsp' starting page</title>5 n  K' Y5 F6 y4 C* Y9 \8 {
  5.   <span id="tiao">3</span>$ M# ^4 E7 S" M! ^4 D* D! T
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……# g" W1 S/ ?4 G1 A2 B
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    # k4 L* n+ ^5 |, T" h/ M
  8.   <!--脚本开始-->
    ; ~" U5 D1 [- L. X
  9.   <script language="javascript" type="">+ c& `8 b( R- c5 ~6 Z2 ?" ~
  10. function countDown(secs){
    $ s, f, S1 }2 o! Z; G
  11. tiao.innerText=secs;
    8 \7 c0 Z# |& y7 I, D& f
  12. if(--secs>0)5 i$ D: p- V* ?1 ^/ _& ]% E  E, Z
  13.   setTimeout("countDown("+secs+")",1000);2 z, h0 H$ G) p, X1 F3 I) N7 Y
  14. }
    % a) O5 i' u* U2 O3 Q0 v, ]) K0 w+ x
  15. countDown(3);" m8 D- u3 t! @* M
  16. </script>
    " L8 w4 _3 u9 y, T- C, r
  17.   <!--脚本结束-->+ W1 A& W3 ], L
  18. </head>
复制代码
例6:! E# k  I; J5 a5 k, ?+ d
  1. <head> ) J1 R! I4 o  K4 F5 U
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    & {7 ]1 ^- Q6 G% H2 n: h4 T7 V) r
  3. </head>
复制代码
例7:
! V- ~- f( r( J  L) z$ R
  1. <script language="javascript" type="text/javascript">+ q' o4 f2 d, o: H. u& O" w
  2. setTimeout("window.location.href='b.html'", 2000);9 D: Q. }7 v' d
  3. //下面两个都可以用6 L5 C( a2 V% V3 k: Y+ Z6 K+ f
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ; W( O, `0 g. P+ g% S. Q1 ?
  5. //setTimeout("window.location='b.html'", 2000);# i# m7 `8 F( X& r3 L/ ~
  6. </script>
复制代码
例8:
- `5 g0 ~8 d/ N  l2 e+ {+ ?4 _
  1. <span id="totalSecond">2</span>
    / C& x% C# T* |  v( P* |
  2. <script language="javascript" type="text/javascript">8 i$ r9 k& @- k4 m9 Y. q
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    7 U7 x8 v- v( Z" f7 O/ e* i
  4. if(isNaN(second)){" t/ m' M( d' O( j( Y' J% g
  5.   //……不是数字的处理方法2 u/ U/ l7 G# ?5 {% L1 [8 K
  6. }else{
    * q! ^: A, p- V' {
  7.   setInterval(function(){) F* |8 u- q  ?6 H1 U+ r- n4 S5 V
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;) ~& p2 X4 H# x" F) `  s
  9.    if (second <= 0) {
    ! a! }4 P7 D5 q% V% n
  10.     window.location = 'b.html';0 O; X1 A9 P: p% W0 I
  11.    }
    7 P; B5 u2 v2 E" h% N) \
  12.   }, 1000);: g4 E$ K8 h0 f" V
  13. } 4 {& t7 z1 d  e
  14. </script>
复制代码
' q; Z1 k/ s; r: A. Q

' ~0 I2 q& i0 x3 ]7 j
# S) E0 \, ^7 ]8 h6 a  w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:47 , Processed in 0.062015 second(s), 20 queries .

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