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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 % c* T7 c: l1 y( W) B
  1. <script> , C4 m; ~! _5 p& Z' `* [8 ]6 g
  2. //定时器 异步运行 4 q( W" [4 W9 w' s# q
  3. function hello(){
    + M- i* \/ H4 m, O! M/ v! k
  4. alert("hello");
    + B: S3 m" e$ N3 e/ Z/ Q3 _+ T
  5. }
    3 h* u' s. V1 L1 _$ N
  6. //使用方法名字执行方法 & S) j) |3 o2 P, c+ j! N. i
  7. var t1 = window.setTimeout(hello,1000);
    + }8 \" P1 d! i6 }) t9 ]
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 8 b* @! J/ `5 ]
  9. window.clearTimeout(t1);//去掉定时器
    ; L9 N2 M& j% `( ~
  10. </script>
复制代码
2,重复执行的定时器
5 c# ~3 I( E1 `' I# R
  1. <script> 6 t0 @; \# j- q5 r( I
  2. function hello(){
    . B; U7 c' `. S0 [% {
  3. alert("hello"); * r1 b+ r& {+ l) c
  4. }
    8 E2 C! z8 d& N/ ]% h4 {4 D6 a
  5. //重复执行某个方法 1 D2 y9 s8 {' C$ g/ W
  6. var t1 = window.setInterval(hello,1000); % E0 U) `8 v* U" \; t) R& r
  7. var t2 = window.setInterval("hello()",3000); 6 V. G# x# e6 P: q8 i
  8. //去掉定时器的方法 - ~* q: o4 m/ T5 A8 f
  9. window.clearInterval(t1); - ^0 j- S! o0 N
  10. </script>
复制代码
备注:
% R9 s* J0 t- y: G% j9 N2 b/ S+ ?
# i5 w3 X* S0 U8 k  Q% |& A如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
+ O5 ?, A9 V# Q, M可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。* r9 \" V: q. ~) G+ @: X( F
4 B8 D  K. J! t8 ]0 \

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
/ j% I' a, M4 h0 Z, X' F2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成; F5 N' f5 z3 E" S  f0 t! G
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。2 L% r$ X2 A& T9 J* p
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
$ \9 d, a7 L" V+ g9 j比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
* u/ i& P" b8 o8 m* E9 k/ l  A$ O则需要用到循环定时器“setInterval("function();",delaytime)” 。

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

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
. w) g) D6 [6 q1 N) b; N: |setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
1 k, @( g0 L- _setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象& z( f1 _9 \$ C
clearInterval(对象) 清除已设置的setInterval对象

略举两例。1 F, U& @4 E4 {3 B
例1.表单触发或加载时,逐字输出字符串

: ~& P' }) O- L; S) q# b3 ]
  1. <html>
    2 x) V; w( j5 S
  2. <head>' R& w( ]$ c/ h# J8 I
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ' r9 E5 f5 ?$ j" x  v
  4. <title>无标题文档</title>, O* K, @; |6 B9 v& e
  5. <script language="JavaScript" type="text/javascript"># k& u- j1 K3 v; v& t: D
  6. var str = "这个是测试用的范例文字";! u0 e& U/ o8 |* T
  7. var seq = 0;: c, E+ M& W" W
  8. var second=1000; //间隔时间1秒钟4 Q0 X7 X2 X) }: G/ \/ S" p
  9. function scroll() {
    9 f- W% ]# ]1 S4 M( }, n
  10. msg = str.substring(0, seq+1);3 e+ c! K' b' a2 K2 ?
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    ) v6 `' |8 h( l5 s, c
  12. seq++;5 ]* V5 A* c. D9 W) X! S
  13. if (seq >= str.length) seq = 0;$ O! b+ v: m' s5 p4 I
  14. }  M* A) Q' H, V0 w/ b. L! C& T
  15. </script>
    9 P' S1 Y% p& ~, w0 ~" Q6 V
  16. </head>+ C, Y( y: b, B
  17. <body onload="setInterval('scroll()',second)">6 F( v' U# M5 V/ q( u6 S/ `
  18. <div id="word"></div><br/><br/>8 P/ T0 ?( d8 p' d/ v
  19. </body>
    0 v, E# b8 R) N# x
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
0 L: `( z5 v/ t  |5 o" |
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    & g2 b) q  @, a: s5 o
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    ! j0 \+ G( D5 Y" [
  3. <head>
    % [' n7 P, N, B
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    & P* p# u. l3 S3 l; P
  5. <title>无标题文档</title>
    ; Q8 [* x2 B/ T5 J8 k2 z1 N" b
  6. <script language="JavaScript" type="text/javascript">
      I  X  @6 E5 `, x7 m5 o
  7. var second=5000; //间隔时间5秒钟
    # o4 ]8 V- ]# N$ c/ n+ F! o
  8. var c=0;5 J0 Q% U& i! P- W& s) X
  9. function scroll() {# H/ U* q1 M9 j" r: |
  10. c++;% \2 k% h. i; _3 p+ B
  11. if ("b" == document.activeElement.id) {9 @7 u5 U" c7 t0 K2 A! K
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    * f4 Q( c" Q8 t" S1 k& m
  13. if(document.getElementByIdx_x_x('b').value!=""){6 [3 D$ P5 D6 u. y" W
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";; d. n3 V7 M) r. P
  15. }* w+ s- o/ r/ e0 u
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    6 A% u; C/ ?. O7 W! }
  17. }
    ( w1 R% m5 z$ W2 Y8 w
  18. }
    4 }! g+ V+ v4 ?
  19. </script>4 q4 V0 A2 a  f
  20. </head>- l: [8 C6 k3 C4 U
  21. <body>( Y1 i' r! G+ S+ o
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    5 I& O7 F8 O8 R4 ~
  23. <div id="word"></div><br/><br/>: C! E5 G; V% S* S, E
  24. </body>' X0 W2 N/ G( y. [
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
, j' @& p% ~; }, _8 x# P+ M
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    . i3 D! I; d0 l* Y! [
  2. <head>6 M. b0 i' `* T4 H  y, f
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    * }6 b( n+ C7 x% M
  4. <script language="javascript">; H0 _# @- L" |
  5. function count() {
    + L' K+ ~  m" [# t9 u
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";  e* a3 v8 [3 s# [- e1 e
  7. setTimeout("alert('十秒钟到!')",10000)7 A0 N9 _& {; F0 S
  8. }2 C! u/ a6 h: o4 p8 m8 C
  9. </script>
    0 W! e- m$ j( X
  10. <body>0 G# @5 [8 A3 Z/ ]
  11. <div id="m"></div>8 x8 j5 ~, j% y* {9 |8 m
  12. <input TYPE="button" value=" 计时开始" onclick="count()">. ~% v( b/ \1 x1 K8 n2 ?7 x
  13. </body>% O; C( l. j$ O: J6 A. L3 C$ b
  14. </html>
复制代码
例4:倒计时定时跳转2 |; C  m9 Y9 d0 a# N3 T0 k' \
  1. <html>
    2 K( w( s5 \- ^* p& M. m
  2. <head>9 v- b8 h$ A* s; J8 \. b. }; ~
  3.   <base href="<%=basePath%>">& `% _. O+ P/ e  C, P8 R
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    ; V8 Q9 M4 d! u' ?
  5.   <span id="tiao">3</span>- K& V5 M: G6 A3 X
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    % d  w9 x$ c+ H. N% R" H9 i* H' P
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    ) N  w& H8 Y3 D' N+ {; Z
  8.   <!--脚本开始-->6 ^3 g; O4 ?: y( C. y
  9.   <script language="javascript" type="">7 w9 H: ?1 Z" h9 }4 ~3 p8 |
  10. function countDown(secs){
    , V) X8 q& ]$ ^, T9 c) F
  11. tiao.innerText=secs;/ \3 t2 b- c0 c7 U$ M) H9 X& I$ a
  12. if(--secs>0)/ H+ u; C! B  [/ V+ B6 A6 o0 E
  13.   setTimeout("countDown("+secs+")",1000);
      t8 w* K2 D+ l" O2 v
  14. }
    * C: K- s& _5 G; S& g
  15. countDown(3);2 W0 ^4 ]' ]# R& @5 o3 P+ b$ n
  16. </script>
    7 _4 M' l" D" T0 W2 w8 `% x- _
  17.   <!--脚本结束-->5 S) {- d, M2 @" {6 r5 y6 ^4 j: e$ S4 z
  18. </head>
复制代码
例6:; `1 F7 U. M8 W" Y
  1. <head> 4 P$ G4 V1 c/ ?" h
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 7 n. d: W7 u8 q# e  h
  3. </head>
复制代码
例7:
5 z8 v+ I# b0 c) d, s+ i
  1. <script language="javascript" type="text/javascript">7 M! u5 k6 Y0 J8 j- g
  2. setTimeout("window.location.href='b.html'", 2000);
    ! E: W8 o) `# d
  3. //下面两个都可以用
    + ^. W$ y0 t/ P' {0 b
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ' `8 l; R$ A0 \5 w% b
  5. //setTimeout("window.location='b.html'", 2000);: Y2 F. [4 n5 I
  6. </script>
复制代码
例8:  [# I6 ^2 n8 d( Z# u/ |$ M
  1. <span id="totalSecond">2</span>2 g* q0 }! E" R! t/ G7 r
  2. <script language="javascript" type="text/javascript">
    3 e1 ?9 e7 n" m0 S" a
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    + x4 t  X/ g  n# u% c( V1 W
  4. if(isNaN(second)){7 d' ]; b0 @9 I* t# Y
  5.   //……不是数字的处理方法
    0 Z1 R" J" q; B4 ?1 p0 o* h) h
  6. }else{3 J+ V4 G0 s( {- `
  7.   setInterval(function(){
    5 R; n7 L0 B/ s, ?
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;# C% K, _2 M2 ?8 u3 `( S0 ^9 l2 `
  9.    if (second <= 0) {
    , g& q- y+ t8 ^
  10.     window.location = 'b.html';3 \7 U& T$ l. I( u4 j& q8 a; c
  11.    }/ C' C/ h7 U6 P) T
  12.   }, 1000);
    8 {) R& e. {, k6 R; I9 m; o+ ^
  13. }
    * `7 L. ]! A' Z7 f# i
  14. </script>
复制代码

( }) D& ?  S! u( G7 `- t: l- T
+ Q* B" D" f& \6 z, j* u3 m, `2 P# r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 02:08 , Processed in 0.063865 second(s), 19 queries .

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