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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器
) m0 \. L+ H5 M1 U% _8 {
  1. <script>
    . D2 m! Z4 T! B6 w
  2. //定时器 异步运行
    " X' t. D! L8 j
  3. function hello(){
    6 L/ }* \+ b$ J
  4. alert("hello");
      d' R, U) k/ B% ~; M7 Q# b
  5. } 2 v( p$ |" _8 A  o
  6. //使用方法名字执行方法 : H  a- y! X" v
  7. var t1 = window.setTimeout(hello,1000);   G% ?, B: _0 w) s0 K' _
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 . t& [& J4 R9 k5 ]& Q/ `
  9. window.clearTimeout(t1);//去掉定时器 0 Y- R* R* ~( z0 d1 V
  10. </script>
复制代码
2,重复执行的定时器 * M  L( m0 @9 b; J( f! E/ y3 A
  1. <script> " ^' ^" `, X2 t- [9 M! A" ]
  2. function hello(){
    6 Y$ i0 ~9 w% ]( N' o& {) y2 s
  3. alert("hello"); ; Z$ u& `% \' f- d
  4. } : ~1 h5 J' [5 N6 J# g' ^
  5. //重复执行某个方法
    9 L$ Q( l* M# H6 P1 m6 {5 Y9 h8 r
  6. var t1 = window.setInterval(hello,1000); 4 n4 @4 j+ H4 z# C1 L
  7. var t2 = window.setInterval("hello()",3000); 6 o, M1 N6 a7 x+ l
  8. //去掉定时器的方法
    ! J$ ^. y7 F9 a( q1 A
  9. window.clearInterval(t1); 3 |" h4 D3 a6 @8 K* P8 r/ V
  10. </script>
复制代码
备注:
4 a: P/ J1 J7 h$ `. H; \* m5 p' I" l( K2 D" a. i
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: . E: z( e$ ~" h1 F% Q, E
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
4 j5 G0 G1 X! L, c
' h( _+ W) U3 O3 S5 o, _. x$ t

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

1.倒计定时器:timename=setTimeout("function();",delaytime);# o7 ~5 o" W4 C; m
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
) e, }. j) J/ M+ f+ o4 ?6 j“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。! U) U; d6 Y$ }: U9 S7 o# I/ \1 r
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
( H/ G( O& _3 Y# i比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
6 ~. M8 U; l, g9 P) K+ o8 B则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
% y; x2 l/ L! X8 D/ q5 e$ s比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。8 v& K% z7 n/ G' S7 Z
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.1 A4 Z% |, t) @; @' |
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象: E$ i3 g) c5 r% s. g
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
1 ?0 Y! U& p& K8 D& A4 g+ A- o- Z例1.表单触发或加载时,逐字输出字符串


8 D8 ]( b4 _+ g5 m. ?. ^! |
  1. <html>
    6 H+ M) Z) a  R& d3 c
  2. <head>6 K! N1 a. W: @  a, G) R; _/ D0 W3 l
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /># ]& N' l8 I7 E+ t( ]9 w
  4. <title>无标题文档</title>, K. z4 I: g- M% u
  5. <script language="JavaScript" type="text/javascript">
    0 o& m' X; \: }. t5 ?* h1 I. [8 q; l# w
  6. var str = "这个是测试用的范例文字";, S( ]$ ?# M3 Y' w( i( y/ Q. s0 R
  7. var seq = 0;
    * }. g9 m; ^7 w1 j
  8. var second=1000; //间隔时间1秒钟, r- q% J; D) J& t, g6 U
  9. function scroll() {* @4 a, }) Z6 E+ d9 L3 s
  10. msg = str.substring(0, seq+1);1 A+ Z3 p6 ^. M
  11. document.getElementByIdx_x_x('word').innerHTML = msg;$ y8 g4 {. E& T" _; w; t: t) s
  12. seq++;6 G6 r; ^2 v) q6 C
  13. if (seq >= str.length) seq = 0;0 E; G4 O  b- e( _& a; k+ B8 P
  14. }( x+ m7 \- m# `( U/ v. k
  15. </script>* x& _8 D, a, X  c7 t' U
  16. </head>5 e# x7 F: l$ F0 X, p( Q* B
  17. <body onload="setInterval('scroll()',second)">
    * c& Y% t: {+ y- o8 Q
  18. <div id="word"></div><br/><br/>
    5 A: ]5 q; z8 o7 \
  19. </body>2 P  |: U6 s" g' [; F' g
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
7 Z: c8 ]- m5 k7 n" F
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">0 Q' \8 E7 `% o
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    2 v1 Y- C$ T" f; D$ K- ]
  3. <head>
    & H5 D8 N, S2 c
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    3 z& j4 |$ h2 ]) \& V' C
  5. <title>无标题文档</title>
    ; I3 D3 Y* H# j/ s- s
  6. <script language="JavaScript" type="text/javascript">* T% ^  `6 Y# E1 s; e4 a
  7. var second=5000; //间隔时间5秒钟
    + {9 l9 s( l0 f6 j& B$ Y
  8. var c=0;5 c, P1 a6 Z) s8 K/ K; Z% M
  9. function scroll() {9 E2 v  F3 _) o1 h+ {/ Y
  10. c++;
    ' h6 P# J( K. T$ C1 w
  11. if ("b" == document.activeElement.id) {" R5 x% [$ G; K) v* D0 h, T
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    3 H1 n  o" I! [! N5 c8 _
  13. if(document.getElementByIdx_x_x('b').value!=""){
    " R" n6 S* X( X
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ' ~5 {# C$ e! Z3 _8 N! t" E
  15. }2 S0 H/ d# E& w
  16. document.getElementByIdx_x_x('word').innerHTML = str;
      [0 r  p$ F; z' c* P6 @
  17. }
    3 R2 E8 _& |% D3 o; E
  18. }
    & y; L& Q9 v/ H  L. s
  19. </script>
    ; {/ l+ ?9 O! s3 C9 i- `9 a
  20. </head>
    ; r6 l) N" O  r3 x
  21. <body>7 L+ p! u- \* @! V
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    8 O, a0 W2 X0 ^3 j3 J
  23. <div id="word"></div><br/><br/>" D1 N1 O4 |4 r5 e
  24. </body>
    8 e2 }, R- D0 d8 u& o
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。1 A2 L3 L# S0 F' g
  1. <html xmlns="http://www.w3.org/1999/xhtml">( C- K4 I, V3 E' q- {& s6 C
  2. <head>
    / {/ b5 o! X# e& w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    " i8 ^% F+ d: W% K
  4. <script language="javascript">, n' K5 V* k( d4 v6 i
  5. function count() {0 k9 g0 a8 v# s8 @, o
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ; |! b: T2 D* V4 K5 ~
  7. setTimeout("alert('十秒钟到!')",10000)
    ' i( i8 q' Q: F9 m5 |% n0 u
  8. }: s! ^/ i' b% @( B" n3 n
  9. </script>
    ; y& n7 a% d0 z# |- F9 ~
  10. <body>
    5 P- g" F4 n) N* _
  11. <div id="m"></div>
    8 K1 B. ?5 z2 G* `7 E3 a
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    4 o& O+ ~+ x. N( ^$ a$ N: [& [
  13. </body>
    5 k& z  {4 N/ C7 c7 L/ @5 W, q, k
  14. </html>
复制代码
例4:倒计时定时跳转" m2 o% |* r0 H/ J; ^
  1. <html>& L5 R1 Z/ t( A
  2. <head>
    " n! F* }6 X: T$ J+ ]
  3.   <base href="<%=basePath%>">
    8 ~, K; p, a2 S5 G( Z1 s
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    7 I% h, q; H2 k. U* D  m& K
  5.   <span id="tiao">3</span>+ G4 X1 [! p, i3 b2 d  i$ Q
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……, D5 _3 B9 Q9 D
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>& s7 D2 [) h+ n; n7 T: o7 k! n
  8.   <!--脚本开始-->, f+ F5 L8 @& Y3 ^
  9.   <script language="javascript" type="">
    4 Z: p( v5 E, I4 l. J
  10. function countDown(secs){. ]/ T4 g& Z* U; ~; ]7 D& [1 e
  11. tiao.innerText=secs;
    1 B( ?4 s$ T+ X7 z( z+ k
  12. if(--secs>0)) J: f9 E, B% C4 _
  13.   setTimeout("countDown("+secs+")",1000);
    . R3 R; @7 u( t3 D0 q
  14. }
    1 q2 p5 y' I* v! ]' T
  15. countDown(3);) C) O1 c- [3 \/ S4 O0 X
  16. </script>
    7 E4 J* Z  j, ]) M5 f9 J- D
  17.   <!--脚本结束-->
    ( }) m+ @) ?8 x  j4 H$ Y
  18. </head>
复制代码
例6:
$ s) R& K" b! ^' D5 H
  1. <head>
    0 F3 f$ c" N  M
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    4 k9 S$ y+ C1 e, |! B4 {% ?
  3. </head>
复制代码
例7:
) G5 }  f) Q# S: f. _% L0 U) s, s
  1. <script language="javascript" type="text/javascript">; y& F% I6 m1 S  C
  2. setTimeout("window.location.href='b.html'", 2000);
    ' h6 _% x; s/ _9 g5 q
  3. //下面两个都可以用
      n; p, x0 B7 X) E1 z0 u$ T/ |' s
  4. //setTimeout("javascript:location.href='b.html'", 2000);8 |6 C6 d$ v- ]# A
  5. //setTimeout("window.location='b.html'", 2000);
    & T( H8 F4 Q2 O! A- b
  6. </script>
复制代码
例8:. u- b& W' {1 g# I4 \/ z0 F
  1. <span id="totalSecond">2</span>
    ! t7 E9 I6 w- i$ [, o
  2. <script language="javascript" type="text/javascript">/ w! y& Y- B! J- g6 p9 R  P
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    : @3 m2 h' i8 `# W: _. j( d
  4. if(isNaN(second)){
    % ^8 k; G$ B$ J& X5 T. [
  5.   //……不是数字的处理方法1 m" M* `* J8 b9 P2 p1 @- H
  6. }else{, A' B1 [0 p2 r' i1 Z7 j! Z  `! O0 g
  7.   setInterval(function(){1 {' a& R* E7 h' p' v. G0 V7 x  W
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;+ ?, B4 c- O5 L& o! b
  9.    if (second <= 0) {" i* }6 n4 V1 t% v) U: o- p5 m
  10.     window.location = 'b.html';
    ; H. w7 M+ d" j1 t/ X$ b
  11.    }
    " Y$ j/ V2 U0 [, i3 s$ K) C$ f
  12.   }, 1000);2 c5 d$ r" r( W) `
  13. }
      M5 _6 ?6 F7 p& Z
  14. </script>
复制代码
( Y- X9 }4 z+ Z" g2 R5 N

, g' T6 c9 I( V4 d9 v( m# X+ d
5 `- n# }8 O+ {* [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 11:43 , Processed in 0.113537 second(s), 20 queries .

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