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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
2 I+ X2 _; g) S$ j" K
  1. <script> 4 c# V- a" y" ]& ~; p
  2. //定时器 异步运行 8 X9 M' J/ u- _, Y6 n8 s
  3. function hello(){ 7 S. c5 ~9 C0 D# y" V$ O/ ^
  4. alert("hello");
    % `  e# `* N, |! G3 K/ j1 c
  5. } 8 A& n) i: m7 w  U
  6. //使用方法名字执行方法 7 Z6 ^' M, q! M  L0 m: l
  7. var t1 = window.setTimeout(hello,1000); 1 A: ~% `$ v8 \9 U! u6 D' @
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法   [: y2 k; s5 m# d
  9. window.clearTimeout(t1);//去掉定时器 1 X. a- ^$ _7 D9 Z3 I- y- Y1 z" E
  10. </script>
复制代码
2,重复执行的定时器
: m( U( d/ X* g: a* T& \0 q
  1. <script>
    8 d" D! L: N/ k5 {8 |. G* [( n
  2. function hello(){
    , R0 a& q' M# k5 Y9 @8 w
  3. alert("hello"); 5 C, h" f) v: F: X
  4. }
    3 u( A' e6 G) L- [; `4 \/ k
  5. //重复执行某个方法 6 H# Q+ u3 r+ F+ d6 L+ T1 h  W
  6. var t1 = window.setInterval(hello,1000); $ ?# y$ R: }" c1 U: B* b
  7. var t2 = window.setInterval("hello()",3000);
      J- L# Q5 P. y$ y
  8. //去掉定时器的方法 2 B3 [% ^1 I+ E# o9 s" T: h% J
  9. window.clearInterval(t1);
    2 {8 T; Q8 X9 D# R
  10. </script>
复制代码
备注: 6 Y2 t- d, u! d5 X
8 J6 Y. g4 `$ O- V8 i
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
) @" ?: q' C" _3 X可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。' H' S+ \! p- Z, I9 y

$ R% r5 G* j0 V& R! V6 q

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

1.倒计定时器:timename=setTimeout("function();",delaytime);& A. w9 O% b. F( y
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
, @! ?# ^$ F% I6 R2 S“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。7 [! M* p: i2 v' g  [+ N
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
1 {. n9 P* A! K- S3 k6 Q比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
) c% d0 q( c4 w3 x$ V则需要用到循环定时器“setInterval("function();",delaytime)” 。

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

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。- I' J) |  [/ h; O' W/ W) l- @( \
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
; f# o8 G* L' p# |6 {" _setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
' ?' G+ O: G7 E) O- w9 j9 L( eclearInterval(对象) 清除已设置的setInterval对象

略举两例。
  {4 p& ]- I$ ]4 N4 i6 }; X例1.表单触发或加载时,逐字输出字符串

7 v; q. |2 r: |# J
  1. <html>
    9 b" W: ?$ P* @, t! p
  2. <head>* L! }; \. x3 x: n2 I& V1 n# E# x
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    6 F4 T+ h$ b( o0 t
  4. <title>无标题文档</title>
    ! _* `6 I9 `9 H2 b0 G7 Z9 h7 x
  5. <script language="JavaScript" type="text/javascript">
    ! O* h4 n4 O! n* t
  6. var str = "这个是测试用的范例文字";) B4 f  d0 A9 n( q
  7. var seq = 0;: c" {  v  J( C* J% Q
  8. var second=1000; //间隔时间1秒钟6 ~: |2 q" p/ Z, p( b# G
  9. function scroll() {; ^  V. y7 Q" l# @9 B
  10. msg = str.substring(0, seq+1);& _7 r% W' N5 n# ?# W1 J
  11. document.getElementByIdx_x_x('word').innerHTML = msg;+ ~. X6 \8 `$ f" }4 \% }
  12. seq++;% M, _# p) o1 O5 r6 _) U" p3 E, o
  13. if (seq >= str.length) seq = 0;
    ! y# b3 t9 l( e9 `& N
  14. }& v6 T' [% s! r, I& g4 u+ J  t; X
  15. </script>) n2 Q5 I& r& T4 ~* N3 ^
  16. </head>% M, V$ Y  M% G3 W, u3 p5 F
  17. <body onload="setInterval('scroll()',second)">
    . W, b2 Q. \8 p
  18. <div id="word"></div><br/><br/>
    * X. E/ D+ s+ Q5 v: A+ V
  19. </body>! l( Z6 ^+ v+ j; u8 [
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。1 Q; [  S9 F1 o/ N0 `6 Y
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2 Y3 u2 F, |; `, z% L7 q
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    3 R" [. i0 g) h! `! d
  3. <head>6 X7 J! c$ M) s9 Q0 L
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />3 Z7 w4 |9 s0 q- d2 m5 r. k8 s
  5. <title>无标题文档</title>& Z& a* m: M8 e) d; t7 ~' S1 Y# c
  6. <script language="JavaScript" type="text/javascript">
    9 ?4 A" {' Q) i5 p& C# V' ]
  7. var second=5000; //间隔时间5秒钟  d2 B; z+ y/ c4 h) J- z! j9 C
  8. var c=0;
    & P( o, l  V8 c& h" B
  9. function scroll() {
    - X& d1 h2 k& N; c( y/ r0 M
  10. c++;3 J. `  f$ o4 Q: Q4 J
  11. if ("b" == document.activeElement.id) {- Y5 |4 F" j3 }9 I8 j* m
  12. var str="定时检查第<b> "+c+" </b>次<br/>";8 Y: K# k# h& ]. L
  13. if(document.getElementByIdx_x_x('b').value!=""){5 P& Q9 _, J7 O( l
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";7 a9 B& T( \. {1 N$ X" S
  15. }
    5 {" |0 c* _2 D6 G3 D4 E/ t
  16. document.getElementByIdx_x_x('word').innerHTML = str;0 L% {  N! b9 Q  \! v0 |7 X, r
  17. }" s. N) A6 T. c7 k0 `! j' ?
  18. }! Y8 r# s' Q! Q! ]2 a7 N
  19. </script>1 A1 e/ ]/ ]) f  \1 b
  20. </head>
    1 L* G) l- a; o5 l1 ]# s: ^( d$ U
  21. <body>
    & d# }5 S, C  m' m0 b3 ~# o
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    4 ?: u: w" l  q. I# r7 X* @! K3 u( T
  23. <div id="word"></div><br/><br/>
    . g  Y# _$ O0 M+ g/ l5 U% x0 }
  24. </body>2 Q; V/ e7 r6 E
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
3 \( z) X; a' D5 a7 S9 M
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    ! h* U& `/ {9 {& _- C: g
  2. <head>
    ' q! Z+ \' b6 T8 b# b6 S
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ( J1 y8 k$ e/ B. m+ J2 Q/ H$ _
  4. <script language="javascript">
    ( ?: D$ u6 U$ q
  5. function count() {# k: b2 L* S9 U0 B) }3 }
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";- N1 X. o" U9 q2 g& s$ n7 |( _
  7. setTimeout("alert('十秒钟到!')",10000)3 {" L. V2 m3 F
  8. }
    / ~5 p) F0 ?$ `$ j( ]: B$ f( D5 @& o
  9. </script>
    - b: w$ J5 I, f) ]+ @7 N
  10. <body>  `+ a3 c2 Y2 G0 H
  11. <div id="m"></div>  k" u4 n2 d) B/ ]* G2 m! W; h
  12. <input TYPE="button" value=" 计时开始" onclick="count()"># J. R5 i# }- \
  13. </body>
    + u  m) C5 l3 T- A8 |
  14. </html>
复制代码
例4:倒计时定时跳转
9 ~2 A( @2 |3 d# l8 z% W
  1. <html>
    % F" N4 ~7 b8 k0 |! P1 Z
  2. <head>/ _4 b9 Q, V, ]
  3.   <base href="<%=basePath%>">! n3 Q* \3 i* U
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    # k; J* n8 }9 r& X5 A' j- R: d
  5.   <span id="tiao">3</span>
    6 m- T# |! G4 h9 C# N' \) n
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……# I% @& X9 ^$ q4 w. r" j( |/ v# R  R
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>& f5 M- `1 \( U. V3 L
  8.   <!--脚本开始-->
    . s2 @$ X' [$ E6 g( W
  9.   <script language="javascript" type="">
    * o" b0 n3 v9 e  [7 U
  10. function countDown(secs){
    4 N6 |7 `3 m+ _2 Z
  11. tiao.innerText=secs;
    6 ?, w# M7 H& P/ ~
  12. if(--secs>0)
    2 O' M. S( w0 ]3 o6 p$ K
  13.   setTimeout("countDown("+secs+")",1000);
    8 S& t8 m4 s* Y8 E. p
  14. }7 _8 D9 h) M* P' o* J; O
  15. countDown(3);
    $ @; A! m3 Z4 |* T; N" L% f
  16. </script>+ c" _* Q' e; w3 x; v
  17.   <!--脚本结束-->3 g$ {( W7 X  b
  18. </head>
复制代码
例6:+ a( I! ]3 }: Y" o6 u
  1. <head>
    + _5 r( I. b4 T0 M" }' R! Z' }
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> . e8 [: b0 T5 v' E
  3. </head>
复制代码
例7:
2 {0 \) V0 L5 x% y
  1. <script language="javascript" type="text/javascript">( [2 A% ~  U4 n4 S
  2. setTimeout("window.location.href='b.html'", 2000);9 F, D7 u* h  G, \, r
  3. //下面两个都可以用2 {  \& l' r, m
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ( @! @: Z: ]6 |7 u+ c
  5. //setTimeout("window.location='b.html'", 2000);3 e& a* Y4 r- _  s0 n8 B1 f' R
  6. </script>
复制代码
例8:
  M6 e8 `2 o# x6 F1 e
  1. <span id="totalSecond">2</span>
    1 i& F- Y# g* ^7 H
  2. <script language="javascript" type="text/javascript">: a) f& i+ b" Z  B5 x  l
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    - w, B; B, i% ^
  4. if(isNaN(second)){
    # h6 ^* Y- e1 H8 g: q, T5 h
  5.   //……不是数字的处理方法1 ?$ W3 Y( f: i) k
  6. }else{
    9 C. J. y( m/ T2 |
  7.   setInterval(function(){/ _1 k+ {1 d/ r+ O
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    5 g% E+ C! m+ t& y
  9.    if (second <= 0) {8 Y+ D- M/ O& g3 b8 d
  10.     window.location = 'b.html';( ]: v3 _; i' R* _+ c
  11.    }, `1 o5 x4 R# r, X% e, U& y
  12.   }, 1000);
    # c2 K. ^2 D3 t' O' W9 ]: ~  N
  13. } ' T; U: g9 z% o* ~) D2 G
  14. </script>
复制代码

& ?! r% w; Y. d+ }7 b0 b+ _; B2 T# m
" `, z# X* P4 L4 R6 K9 k' h4 N! x6 v' M! @  E4 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-7-21 10:34 , Processed in 0.077176 second(s), 19 queries .

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