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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
0 ^+ a! E$ f( i. o- m
  1. <script> 1 w8 e+ y; \. Z9 o
  2. //定时器 异步运行
    % z$ M! h; ^+ Y
  3. function hello(){ ) g7 t. m1 s4 z+ F/ K' }8 J
  4. alert("hello"); 5 w' V: f- \/ g
  5. }
    , k" n- O5 H/ j# `4 D
  6. //使用方法名字执行方法
    6 f, d2 c' U0 X/ W: i3 ~3 p4 `
  7. var t1 = window.setTimeout(hello,1000);
    6 n9 ^& q/ Y9 I1 |2 p. G
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 6 q* j1 K* N2 T  c  X' b
  9. window.clearTimeout(t1);//去掉定时器
    2 C+ f. w' X  g" W
  10. </script>
复制代码
2,重复执行的定时器
" n: n  m$ V4 d% A  X
  1. <script> 7 g1 M) d: h, }0 r
  2. function hello(){ / r1 M3 ^7 |" G! v" \( v
  3. alert("hello"); . i9 O# r/ ?3 q6 G# i/ {3 ?
  4. } + b! k8 C! Q, \, y4 K0 Y
  5. //重复执行某个方法
    3 j. _, U& ]% T3 Z
  6. var t1 = window.setInterval(hello,1000);
    4 ?+ A0 U6 z: ?3 m# j
  7. var t2 = window.setInterval("hello()",3000); ' \5 |3 Y2 j" ~& a! B- U' U
  8. //去掉定时器的方法 9 J: D0 v  J" z/ v5 {. G
  9. window.clearInterval(t1);
    ! e( X: |8 F8 n) ?  q1 k: A
  10. </script>
复制代码
备注:
- ~  k+ _! j+ r$ O3 f4 h" H; |3 M: G, B, _3 `* f0 r' f9 S
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:   g- w1 m7 \" d7 g9 P
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。6 I/ o! M; s9 S7 q. U  r

* d$ d( `7 [" l: T& L. `

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
7 e# s* W9 x' O9 F8 ~+ m* v2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成, E4 P4 O1 K- Y3 K/ n
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
. g; z- c. C+ p4 e6 t' M& N. ~4 R  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。: g, ^8 u. t% M) W
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,- l2 U" O4 ~9 z7 A5 u1 B2 D7 j: k
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
+ Q! A7 V6 r) ]比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
# H7 {( _3 z2 usetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.; i- ]( s! _8 m1 F/ E" r
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
) Z; A: A7 g# L9 U! f) Z" u: @clearInterval(对象) 清除已设置的setInterval对象

略举两例。: N* F! s+ g  E$ o: R
例1.表单触发或加载时,逐字输出字符串


+ `! K6 l+ h/ t. _
  1. <html>* J% H" ~, g  O, d- ?% P  V
  2. <head>3 H1 {& k' g: D9 o# t
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    3 [  Z$ D6 _# K/ \
  4. <title>无标题文档</title>
    - |) ]+ t  t2 j, a" ~; L& S% n& ]
  5. <script language="JavaScript" type="text/javascript">
    * }1 z7 y% J2 k! ~0 D, M
  6. var str = "这个是测试用的范例文字";
    : s( L/ I% e* l, u( ?. I# C
  7. var seq = 0;& M; s8 L% F5 j% C
  8. var second=1000; //间隔时间1秒钟) S3 o5 U! Z9 d7 H/ U# {
  9. function scroll() {2 W/ w4 _* O5 o2 ^+ I
  10. msg = str.substring(0, seq+1);* b  |; w( a# \" G
  11. document.getElementByIdx_x_x('word').innerHTML = msg;6 J$ i5 v7 S+ ^# A3 _
  12. seq++;; X$ _5 X3 E  e  F
  13. if (seq >= str.length) seq = 0;
    ! Z, ?8 P# P& J3 M
  14. }( `+ d) W2 e  l7 b: ?
  15. </script>
    ' ^* R6 \6 m2 T8 {
  16. </head>
    - I& l5 z! P6 `. I! e1 }
  17. <body onload="setInterval('scroll()',second)">) Q- Y0 u8 \( Z
  18. <div id="word"></div><br/><br/># M& v. z7 g, m! r6 F2 L2 C
  19. </body>5 p' k) P2 Y6 S- y' F
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。$ h9 w0 N( ?- A0 s1 T0 _" |
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">8 ^; t8 y! Q/ F/ q0 _
  2. <html xmlns="http://www.w3.org/1999/xhtml">( S' X1 i% _6 z3 ?+ y" L; ^
  3. <head>+ {% H8 n, ~$ c8 }
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 E1 E1 Q' t+ ]8 {4 G/ Q7 C. N
  5. <title>无标题文档</title>
    % w' d& f" J# e0 ~4 \
  6. <script language="JavaScript" type="text/javascript">
    / ~! m" Z2 C9 ^+ U
  7. var second=5000; //间隔时间5秒钟6 o5 ]0 R% \, w+ j1 M" X
  8. var c=0;5 O4 C" A7 ?; ^8 a0 V
  9. function scroll() {
    7 a+ m7 m( L0 y7 A2 a
  10. c++;- n5 Q9 {- l: g: S
  11. if ("b" == document.activeElement.id) {
    & c$ p/ {# `7 o( `6 N
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    5 n# e0 z* @, i& q4 ~8 T
  13. if(document.getElementByIdx_x_x('b').value!=""){# I' U) |& u/ o' n: [: [- r
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    . {* u! ?: i4 q# s
  15. }
    : @8 j7 [3 r" B2 p/ i. e
  16. document.getElementByIdx_x_x('word').innerHTML = str;' }) g+ H  q. G3 y" U; j# A
  17. }# W: }$ p! @+ G2 @- u- s
  18. }
    $ j! _0 H5 V! T" u
  19. </script>7 V( C+ l  _6 z. S3 ^5 w: \/ F
  20. </head>
    & I% U5 M9 J! s* C' o) l5 \
  21. <body>8 t+ V. @) E- F; I
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    2 w7 `- X% f- K$ Z
  23. <div id="word"></div><br/><br/>
    " _" U, _% Z' O) l7 f" d; A
  24. </body>
    ' S% v5 Z8 [+ O$ y, u0 c) o# f
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。5 k6 n4 @% ^7 }7 f3 n# c
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    ' ?, C* x; h3 s8 F
  2. <head>
    . M/ Y& B: A& U5 t
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /># L2 J7 |$ [4 X
  4. <script language="javascript">
    " c: E4 H  r# O$ Q- G
  5. function count() {6 M* C. ~: C$ k3 o
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    7 I' l& L" ~8 w( [4 [
  7. setTimeout("alert('十秒钟到!')",10000)
    2 q0 k5 ~) m3 ^
  8. }  f2 G6 w, ?3 Z2 J# z
  9. </script>
    2 {, M0 t9 g2 t/ L/ W: z5 {+ K! s
  10. <body>
    . u# C) I0 V3 u. Z; }3 z& }1 ?- Y/ J
  11. <div id="m"></div>0 T& _$ Q+ U& O. p9 E! ]- I
  12. <input TYPE="button" value=" 计时开始" onclick="count()">- D5 O3 J0 L( [! \: Z+ ^6 z/ x
  13. </body>
    % u& w0 J6 R$ E+ |1 `
  14. </html>
复制代码
例4:倒计时定时跳转
+ D' Z' N" L: y8 O8 b; ]. g
  1. <html>
    $ m7 `$ A4 L) _4 `9 X* L4 t! t
  2. <head>. \, V( Q0 m1 q( q# f# S
  3.   <base href="<%=basePath%>">! V2 P; @( V4 K# D! v2 M; S
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    , ~5 P# t2 W7 E3 V( Q
  5.   <span id="tiao">3</span>
    5 K5 w  q, J4 x9 v& @/ {& S
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……7 n; j" j  z5 S: R+ G
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    . t7 v1 v! H" w6 G2 H4 `
  8.   <!--脚本开始-->
    ( A1 ~, m- o0 H/ \$ n& N# U9 h( e# Z: h4 N
  9.   <script language="javascript" type="">+ t# n; F: z* P0 Q) Z
  10. function countDown(secs){
    . I- i5 W. t+ J$ [( M" o& D. D0 {
  11. tiao.innerText=secs;
    8 i/ ?5 Q# y" Y5 B- m7 f" b
  12. if(--secs>0)
    4 n* D; E# x! w# I
  13.   setTimeout("countDown("+secs+")",1000);
    4 C6 ], F2 ]) c) _2 }& [# C
  14. }
    - J" \, S! c. c+ I& D+ n. Y
  15. countDown(3);; f- w! l2 y  p' a  r! m
  16. </script>* I( N- y% e: a  @% s" |( [
  17.   <!--脚本结束-->2 f9 g9 {) P' q' P4 E: H
  18. </head>
复制代码
例6:
" f) n2 G# W/ L& T2 j% ]
  1. <head> ! F; R4 }) T) j/ E2 c
  2.     <meta http-equiv="refresh" content="2;url='b.html'">   c! ^: X. }' }3 N
  3. </head>
复制代码
例7:; y" {; n7 l1 F# g* U6 s
  1. <script language="javascript" type="text/javascript">0 u; z- q% a1 g5 U( Q
  2. setTimeout("window.location.href='b.html'", 2000);
    ) O# e7 O! D% E
  3. //下面两个都可以用9 q$ o$ \/ W6 B/ z0 E) S! ^
  4. //setTimeout("javascript:location.href='b.html'", 2000);" z- t, B( F+ V4 e) P- o
  5. //setTimeout("window.location='b.html'", 2000);
    + K1 q/ I  Y3 b7 b) W5 u, y
  6. </script>
复制代码
例8:3 c$ q$ f* o1 _! J3 D
  1. <span id="totalSecond">2</span>  ~$ u: b9 _; N! a. D  i
  2. <script language="javascript" type="text/javascript">
    : i3 H# ^# G2 R8 L# H# c
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    6 Q' M% s7 |$ L; `
  4. if(isNaN(second)){
    " _0 n( Q1 Q- `; C
  5.   //……不是数字的处理方法: `& @9 X9 m; Z2 u
  6. }else{* R9 f. {8 R5 ~& b% X
  7.   setInterval(function(){/ {; j* @0 Y9 m$ w
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;" m2 i! j* N# j6 W3 O
  9.    if (second <= 0) {. @, C" H- n$ G1 M
  10.     window.location = 'b.html';8 q0 y* z/ X8 f% ^8 A& ~3 o# Z
  11.    }1 u2 _$ [1 t6 F  k0 L8 a. F4 V+ o6 ~" d
  12.   }, 1000);  j  i. J+ B. o- p
  13. } + Z( [! C% B0 B
  14. </script>
复制代码

& V" T' H5 @% N1 b8 v) \( g: z$ r# R% n5 }  L! C
  S5 o0 r% y' t" j& |/ O1 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:33 , Processed in 0.061795 second(s), 19 queries .

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