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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ( k5 a  @4 U* b/ L
  1. <script>
    9 k3 ^* g* q' G8 g
  2. //定时器 异步运行
    . I3 C3 C  [3 G/ @8 O, j. B& \
  3. function hello(){
    & y6 d* g1 g( }# y$ D9 U7 g
  4. alert("hello"); ! q& m4 b. `8 w3 B
  5. } ! {' d$ _0 q: }" n/ n
  6. //使用方法名字执行方法 8 a, p5 g7 e2 j/ X5 a$ l; V
  7. var t1 = window.setTimeout(hello,1000);
    + \- B! c: B0 R' a$ d3 G
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 $ U; ^6 B3 H) z1 n% Z2 |
  9. window.clearTimeout(t1);//去掉定时器 # T+ q; B8 k4 B" D. Z$ B
  10. </script>
复制代码
2,重复执行的定时器 - Q! m7 M: J5 P: `
  1. <script>
    % [9 D! ?$ t! T; ]
  2. function hello(){ # M* K+ t' S; D3 ^$ h- s
  3. alert("hello"); - |! O% Y6 W$ ^* J# |; z
  4. }
    ( K+ j+ M! h. b$ G) i8 V
  5. //重复执行某个方法 3 ~# _2 S' v* _) }5 n! o% Z0 ^
  6. var t1 = window.setInterval(hello,1000);
    ! G# r1 n+ ?8 R+ ^
  7. var t2 = window.setInterval("hello()",3000); 8 s0 F% `% n" {! B" E( n# N# z. ]
  8. //去掉定时器的方法
    + X9 S0 Z. Q* ?0 _
  9. window.clearInterval(t1);
    9 z  K; p- L) l: O  I  p( e, {0 h
  10. </script>
复制代码
备注: . e  \$ e4 [2 z- t- Z9 P; V5 ^; q
' e7 b( H1 C5 |- _0 B5 H
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
7 ?: P/ w1 G4 j; V. W可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。. W2 S* J6 o8 f( @) [/ q* ?
: x: J) I- P8 L, z, T) t2 b3 o1 g. B" z

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
; D) ~+ |0 U& r2 t/ _' o+ F+ ]+ N2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成+ j% F9 @. M1 s
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。1 @" }- n) z+ v% |
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。8 Z9 |: ^5 I* M/ b* s3 D  a
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
5 i' ^! Q4 m" o2 l则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。$ `* k2 l+ m; r# ]" G
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
( R- \2 ~9 ~, b3 r' L+ YsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
5 a* Q5 r+ o9 N! T+ N- m& N" tsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
8 h/ q7 u0 u# B- {& g& {! P2 NclearInterval(对象) 清除已设置的setInterval对象

略举两例。$ m  o! J; c. c" \. Z( \
例1.表单触发或加载时,逐字输出字符串


) w* U& A. k2 Q& V; F0 Z  L" P
  1. <html>  ?0 {/ u  z2 i% o8 w
  2. <head>( ]# ?& d( C7 g5 g. ^7 J7 @
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />8 r4 A! D! I' W
  4. <title>无标题文档</title>, U2 E" \$ G6 e# x( V
  5. <script language="JavaScript" type="text/javascript">8 X, W, ?- A  F5 {4 P3 r
  6. var str = "这个是测试用的范例文字";
    % G* [# c" }" O+ \% N8 D
  7. var seq = 0;
    " _* k* W6 s8 ^  \: ^( ]. J  Q$ f0 M
  8. var second=1000; //间隔时间1秒钟" O8 U0 r' B* v  g5 y
  9. function scroll() {
    ! p. M, N" j( G7 ~+ S/ y
  10. msg = str.substring(0, seq+1);$ \, \! ?% t$ T4 a: q2 {- h
  11. document.getElementByIdx_x_x('word').innerHTML = msg;4 \) o% P7 T9 y, r
  12. seq++;6 c# d0 P) H2 T! T
  13. if (seq >= str.length) seq = 0;
    5 \0 S, [! \8 c- E* P* G9 W) H
  14. }
    0 Q$ F2 }4 i  f! n8 p
  15. </script>
    + R4 F) ~+ f! B* l" k
  16. </head>
    ' i% i+ q9 U# Z' ~
  17. <body onload="setInterval('scroll()',second)">
      Y& n% Q5 c* `7 j5 z
  18. <div id="word"></div><br/><br/>
    4 [$ Q# v, K: d  d* o$ H
  19. </body>! x2 O8 v2 \0 A2 W% r# S- S
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
3 y" J# ~; V# l: c
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">( b6 C9 W$ F4 [1 H& g/ ?5 f
  2. <html xmlns="http://www.w3.org/1999/xhtml">. I, o' z# Z& T$ i/ h. r3 S
  3. <head>
    % Y: P$ j- m4 C
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />8 C+ |/ x* ~( D: g% Z# [
  5. <title>无标题文档</title>
    2 U+ f* l6 ~* [' c8 o! `
  6. <script language="JavaScript" type="text/javascript">
    + h& Z$ J3 U/ O3 \: W  i
  7. var second=5000; //间隔时间5秒钟
    6 h5 z9 z: l2 U+ f. Y
  8. var c=0;6 s5 y$ M) ~; M; j: }2 x
  9. function scroll() {
    - D% M1 i# i' i3 V+ {, }
  10. c++;/ @  I# O# z; e9 j/ B4 @
  11. if ("b" == document.activeElement.id) {
    # F& Q- z5 ]- [
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    . Q& M  T  G* M4 Q. t# }
  13. if(document.getElementByIdx_x_x('b').value!=""){
    # \. v4 I0 t9 G, B- A
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ( E1 y* f: d& k2 |! k4 E9 f# m  l
  15. }! q/ l" x2 E; N: A1 e4 M
  16. document.getElementByIdx_x_x('word').innerHTML = str;+ t' D- G: @$ q, N+ u
  17. }
    9 K8 l' \, X4 `
  18. }
    % q$ ^  ]& S4 m; c, ^
  19. </script>6 g: X9 F4 X# j$ u4 i) {/ i
  20. </head>0 t, H" q& @; M; H+ _
  21. <body>: `5 P2 ~$ i1 Y% F7 O6 ]
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>0 D0 ]8 u& O2 }6 A
  23. <div id="word"></div><br/><br/>1 {: W  L5 S1 U' H* [1 r, T
  24. </body>
    ! j1 J: z: b! B3 Y3 P, i
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。2 `  \  |! p. V+ |" Y/ T# U
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    ; c9 ?+ f: [, u, y2 g9 j' N
  2. <head>
    7 F% Z& B* w6 _: ^, h
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />+ o: c0 U5 }6 H8 Y: w
  4. <script language="javascript">
    7 c# r! y3 {/ ]1 z, H
  5. function count() {
    4 q7 o9 B, {- v! c  u5 X
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";( J, u* x4 U3 g( y! p
  7. setTimeout("alert('十秒钟到!')",10000). n* Y2 R6 r2 l* u4 V
  8. }$ F& a4 F, V- ^: n2 T/ k. p# {
  9. </script>
    8 ?; |* w0 Z( m5 D
  10. <body>
    1 A; o, l9 V" \: I6 q* Q
  11. <div id="m"></div>& d# @" ~+ L+ e# j4 |. g
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    2 ?0 {% I; k5 T
  13. </body># d2 s: E5 O* j) r0 j) o
  14. </html>
复制代码
例4:倒计时定时跳转$ u$ p# a+ p# }9 {
  1. <html>% V$ v8 K1 V/ b7 T' w
  2. <head>
    ! s1 m3 w  E" R
  3.   <base href="<%=basePath%>">& |2 [" J% x2 b9 }" ?$ D3 ?8 E
  4.   <title>My JSP 'ds04.jsp' starting page</title>( T+ o2 O+ {+ l" x7 E  o8 A) j8 B
  5.   <span id="tiao">3</span>
    # y8 J' Z) T( m, r4 H
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……/ o. c  L/ j8 J5 i
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>3 @) f9 v- n; i- x1 y1 M6 k9 C9 W
  8.   <!--脚本开始-->
    - w/ c9 z0 ]$ o
  9.   <script language="javascript" type="">6 S4 J! _7 w! M0 E
  10. function countDown(secs){
      ?7 [, c9 V7 o9 n
  11. tiao.innerText=secs;
    8 }/ P+ w9 m( S; b- w* D
  12. if(--secs>0)
    % Z0 B- Q6 T. r6 C# w
  13.   setTimeout("countDown("+secs+")",1000);- d2 V9 |9 e, g* w
  14. }
    9 r& X5 n; [6 w4 V2 `: g$ l
  15. countDown(3);
    # L4 `# U5 }: f, }
  16. </script>; F8 U' ~- M: h
  17.   <!--脚本结束-->3 w! Z1 [6 I4 F. \6 b7 l5 I, Z
  18. </head>
复制代码
例6:
" A1 s; J- v/ C$ `3 p7 f
  1. <head>
    7 v+ E2 }4 x, I: L- W) Z; L
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ) O7 R  R: ~* o% N  i
  3. </head>
复制代码
例7:
: c' K& I2 N& F# N' z& |7 {
  1. <script language="javascript" type="text/javascript">
    $ q  l) _( M4 D( v" i' m
  2. setTimeout("window.location.href='b.html'", 2000);
    5 R) \; Q+ |/ E$ J! x5 @
  3. //下面两个都可以用
    $ P3 B$ B, R9 v
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ! n0 s7 U* F. n: ^3 X: i9 [1 R
  5. //setTimeout("window.location='b.html'", 2000);" R4 F2 H! [/ W5 s% K9 d2 O
  6. </script>
复制代码
例8:, `' |: f8 S% k; P5 p! I) o& W- M
  1. <span id="totalSecond">2</span>
    4 P# w9 V% V$ f! k+ S; }1 Z: w6 E3 k
  2. <script language="javascript" type="text/javascript"># E, K' L3 z0 Z! m" P
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;7 J: z7 i8 c0 T& a
  4. if(isNaN(second)){
    9 D$ `% z( l0 p% h, ?
  5.   //……不是数字的处理方法% P9 C( S4 E: r7 H* q6 q
  6. }else{
    / ]6 W; n7 _9 T) w& ?, w$ b+ D
  7.   setInterval(function(){. E8 w& Q- H( T- U( F
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;7 ^: x* O2 R% e% G8 T7 K
  9.    if (second <= 0) {7 r3 I5 j' A- Q
  10.     window.location = 'b.html';# V8 {$ P( X0 @9 j+ z
  11.    }4 P7 g: p6 v' O! H( @
  12.   }, 1000);
    / t+ W+ O) p# Z3 |; v9 w+ Z: D
  13. } $ _9 e. C/ v6 o6 o
  14. </script>
复制代码
* ~! v, Z" Z2 C: M4 N7 ]

% p5 D( a, h7 @# B, w- }3 m" q$ X8 C4 H) p# Z/ J8 H5 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 23:03 , Processed in 0.056409 second(s), 20 queries .

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