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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
+ H9 q& ?2 h' C0 v( {) b: a# o
  1. <script>
    ) X( J& i( O/ |3 g9 ~9 O4 i
  2. //定时器 异步运行 4 I" W7 A* u* r9 d+ s+ I+ @
  3. function hello(){
    & f$ n/ Y) @& t
  4. alert("hello");
    4 b; e6 T3 ?8 {9 I
  5. } 2 V& \. q( E; J/ u; d# Q2 G
  6. //使用方法名字执行方法
    & B) \& h8 W& D" X! Q
  7. var t1 = window.setTimeout(hello,1000);
    7 ]7 ?# w6 R9 Q: B
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    9 g2 l$ M" ]. M& H
  9. window.clearTimeout(t1);//去掉定时器 6 ?- u2 |3 u( }% `/ ^
  10. </script>
复制代码
2,重复执行的定时器
' n1 Q# P, O! _+ e# r
  1. <script>
    ( {! \0 [. x, c+ R$ G
  2. function hello(){ 2 s! S: h, [' `% a) p. f# ?
  3. alert("hello"); 2 d# v% r+ m7 H) W
  4. }
    ' |7 T0 N8 \. y: W
  5. //重复执行某个方法
    : B! I6 N* F0 G* S
  6. var t1 = window.setInterval(hello,1000);
    * R$ g) E) @3 v; B0 {
  7. var t2 = window.setInterval("hello()",3000);
    # t" x) O. y0 U" C0 ?+ ?
  8. //去掉定时器的方法 0 C6 I( [2 C9 U5 O# C4 _
  9. window.clearInterval(t1); $ d: E5 Q# z! e& u  G
  10. </script>
复制代码
备注:
8 \( s$ }# J3 S0 z' v, Y6 V7 V) c( ~3 [" N7 [! ~" n. J  T
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
. b0 `: Q/ `7 ^- T0 {& F( H: W可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。3 b! \, P: }; c7 B
8 G. E: n% _2 q- v

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
. P2 F. v7 Z  O2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成' g1 O5 W# y- P! z
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。7 T) @3 K6 @- Q  Y: ?! e8 ^7 y4 z
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
# J/ E- i% g) _6 r& f3 _9 b4 C; p- z# U比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,! y+ @; {& S. p+ I- ?% W; b" ~
则需要用到循环定时器“setInterval("function();",delaytime)” 。

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

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。0 D: o) Z! S. {( s2 x) z+ Z
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.8 r* ^* ?  j# A: c
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象& c) ~' m7 C& f
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
1 [& `$ [6 `# W例1.表单触发或加载时,逐字输出字符串

, N2 Q4 {# Y" Y! c# s
  1. <html>
    3 z, C) q* {& w8 W
  2. <head>
    + Q) M2 h4 i& k, ]+ g" r" ^  a
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />0 x% W" F1 h* f
  4. <title>无标题文档</title>  B! {$ _; q* g. x" [4 [( |- s
  5. <script language="JavaScript" type="text/javascript">+ `. Q5 i* V, k# v. b$ I* ~1 A
  6. var str = "这个是测试用的范例文字";3 F& c! F( k3 Q7 ^+ `) K
  7. var seq = 0;- P. y, t6 c3 w: x9 v0 Q# J
  8. var second=1000; //间隔时间1秒钟
    * K* x9 p4 I! u1 d
  9. function scroll() {3 {9 v% f& g7 J7 `
  10. msg = str.substring(0, seq+1);' l! i. g% W: U0 O/ K9 j# z
  11. document.getElementByIdx_x_x('word').innerHTML = msg;5 f! d& B- h7 C9 y
  12. seq++;0 K' u$ H% E$ E( W
  13. if (seq >= str.length) seq = 0;* ]$ r5 w  U( m2 V
  14. }
    ' {6 p" k& H  R! l
  15. </script>) D- F" y# l. x$ i: ^
  16. </head>
    / W7 x& m, s  m- L9 |' B, |
  17. <body onload="setInterval('scroll()',second)">8 O4 X/ Z' l) t5 Y. E* p+ t
  18. <div id="word"></div><br/><br/>& s# b6 d  g* r6 w. }5 Z
  19. </body>/ t0 n* O/ h( t! h! n! s* C
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
0 k) l& e3 Z/ P( N- C; j! n
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">5 p: E# U: `6 P8 `% v
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    % G/ S% z# p5 D* T
  3. <head>
    2 G$ }+ z. h7 R( D) a
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />3 ^2 K& D/ h; M9 S
  5. <title>无标题文档</title>
    + f4 C7 }) t& c
  6. <script language="JavaScript" type="text/javascript">
    / ~% V1 [: k7 g) C/ h
  7. var second=5000; //间隔时间5秒钟6 J  l9 [0 m# Q; F" b$ F
  8. var c=0;5 |) e* _$ u4 z/ T1 i" o
  9. function scroll() {7 Q. S3 J- c8 {( s% f  {" g% F, G
  10. c++;
    ! Q, x$ s/ [8 B- A/ P
  11. if ("b" == document.activeElement.id) {
    % ~0 F6 p( L9 R. k
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    % P9 g) _# z' D
  13. if(document.getElementByIdx_x_x('b').value!=""){' V( [2 F% r3 b2 b8 {
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    1 Y, i2 r9 j" q4 t2 `
  15. }9 Z. d+ v( X4 u" X# _
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    7 R2 z5 B6 \) ^/ z2 z+ @' ^5 L& j9 F% F
  17. }
    4 W6 e: B" j) B% z  H- r
  18. }
    9 ^+ i+ W7 T) r- b9 e, C! A4 k
  19. </script>: W) j# c. Y& D
  20. </head>
    2 C- e* K( ?) E
  21. <body>& f8 t4 q/ o0 S
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    * t7 i& m2 g& B! S- k
  23. <div id="word"></div><br/><br/>
    ; c1 {$ g$ [% f5 x
  24. </body>
    * T$ w  X* r, b3 L. X" G
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
3 ]- F5 u( B. q* A0 E4 e* K" E
  1. <html xmlns="http://www.w3.org/1999/xhtml">2 e, F& }4 E2 P
  2. <head>, A  f2 B9 r8 @9 A- W3 v! g
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />, z0 X! P; E( ]# Z: J
  4. <script language="javascript">
    7 L# h2 r. _  G+ Z( p5 _  N. M
  5. function count() {
    & E- F2 C5 q/ O* l. m8 d
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";" t. B0 l# s! @3 j: v
  7. setTimeout("alert('十秒钟到!')",10000)# r; Z! A# o9 ^2 p* E& Y
  8. }
    * e# a; B, g/ X/ G" f
  9. </script>
    - z% ?+ Y/ q) d, l" n. O/ t- J% ?
  10. <body>
    / [% \1 c0 w# `0 w, T3 S
  11. <div id="m"></div>  Q8 `. b" Z9 K3 U& ]
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    4 L& p- N& W& V- T9 [# F
  13. </body>
    0 N6 m. M0 b% R8 g5 G. M# M
  14. </html>
复制代码
例4:倒计时定时跳转
0 a3 D2 B( r2 |7 k
  1. <html>
    3 Q2 C6 J  W: j  N4 e
  2. <head>' Z6 O7 f7 U9 J! N
  3.   <base href="<%=basePath%>">7 m+ O9 o- `8 A9 L7 {# S* z
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    : E: n8 E) @0 M9 J  v
  5.   <span id="tiao">3</span>% `: h& n  ]! y& P6 g
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
      C1 [) [9 `) V, s
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ) D/ S6 s: T& l) f% l' D! X! X8 J- c
  8.   <!--脚本开始-->
    , M. \3 H' e- d1 o
  9.   <script language="javascript" type="">" g6 p1 b) j& E2 I  J' T' l' N* _
  10. function countDown(secs){
    , Q! j' n+ i- g
  11. tiao.innerText=secs;- W/ U  I5 V5 _# J& v9 j
  12. if(--secs>0)2 k! |6 C, \. k' A
  13.   setTimeout("countDown("+secs+")",1000);
    ) x4 r* ?  l" W8 u$ L5 ~) k: j
  14. }
    1 J. s; @. g3 |( x+ ]; D; {" E
  15. countDown(3);
    6 E# s4 P+ q( A5 z5 `) m* `
  16. </script>
    8 T" D" h3 a, R, ?6 k5 }8 R& k
  17.   <!--脚本结束-->
    . m& M' H* D/ K2 ?
  18. </head>
复制代码
例6:+ A7 c' y! ~7 ~9 W% E* y
  1. <head>
    " z  A  D0 z* `( k. w  T" a8 q
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    # @: _  U# ]# G
  3. </head>
复制代码
例7:
: E9 d: W& G1 c
  1. <script language="javascript" type="text/javascript">
    & F0 w+ n/ e! K3 h& R
  2. setTimeout("window.location.href='b.html'", 2000);
    ' Z7 z- ?  c/ [1 Q
  3. //下面两个都可以用
    7 j9 p0 B; Q  F1 c" [
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    4 S. U! Y$ `  h0 k9 R4 {
  5. //setTimeout("window.location='b.html'", 2000);1 u% D, l$ {1 e0 O4 i( V  D$ T% m& P' e
  6. </script>
复制代码
例8:
2 i' L" j$ u( H% y
  1. <span id="totalSecond">2</span>8 Z8 y* [7 f; t3 S
  2. <script language="javascript" type="text/javascript">+ X, V+ A0 s, h$ {1 W7 l2 \
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ) i0 {/ u6 s! W3 H8 t8 o
  4. if(isNaN(second)){
    2 w. s/ ]! K$ n$ m' s
  5.   //……不是数字的处理方法
    ' z; Y. {+ b) c1 w! p! @+ T7 }6 z
  6. }else{
    3 ], f7 H0 ]3 A7 `0 M( [
  7.   setInterval(function(){: P/ ]0 O7 l9 D4 E1 p$ k, C9 ?
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;$ @& W6 W, b/ z' x2 W+ ]
  9.    if (second <= 0) {
    ) q( ^& a: p- q4 N( i' u  X
  10.     window.location = 'b.html';2 Q3 ^4 j- Z& b4 ?- [6 B( [
  11.    }0 A7 |0 m* l* @
  12.   }, 1000);
    * g" O$ C# v, f6 x. H& E9 W
  13. }
    . X5 M: M( d$ f5 T( y
  14. </script>
复制代码
8 ~7 n8 _" d! o- t% q9 Q

6 U( _" w0 a5 M; q$ }% b- g1 p1 _/ S3 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 13:36 , Processed in 0.072004 second(s), 22 queries .

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