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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器 # O4 y- A' `( y" J/ O
  1. <script> # E+ ~: b* U3 y- `7 q, h' F
  2. //定时器 异步运行
    6 @8 E& d: J" d" n, \6 d
  3. function hello(){
    3 g' C8 U+ a4 R
  4. alert("hello"); : h9 f  t6 F7 G; S
  5. }
    6 a, u: f: g; ~3 Z- Z7 Q8 s
  6. //使用方法名字执行方法
    - p. }: \0 @/ M* @; Z% {3 b
  7. var t1 = window.setTimeout(hello,1000);
    0 k; O9 V9 g! J5 k
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    8 i; W) c0 J$ d8 C9 T1 |
  9. window.clearTimeout(t1);//去掉定时器
    ( e9 r4 U) Z% k5 z6 j
  10. </script>
复制代码
2,重复执行的定时器
: B8 ^0 l% X; D' G" {1 z4 w
  1. <script> 8 M/ h! X0 x. t, ]( e- |
  2. function hello(){
    , t# C8 V( |0 U' n4 |' ?: j
  3. alert("hello");
    8 R  l8 ]5 D. j; B0 E& G7 H" n
  4. }
    - L! `; r* s7 k/ g2 F. s
  5. //重复执行某个方法
    - t: B2 a' F: Y# }0 X
  6. var t1 = window.setInterval(hello,1000);
    $ O" n( s0 S/ q4 Y
  7. var t2 = window.setInterval("hello()",3000);
    ( a2 h+ y5 |. a- ?" D5 [+ K# A
  8. //去掉定时器的方法
    7 M# X+ y( P' }0 E) W5 ~0 P# t. ?6 M
  9. window.clearInterval(t1);
    ) v0 N' E% J: x  r& R
  10. </script>
复制代码
备注: . t/ Y/ t% I3 w3 N
# c  Q7 n* Q% F( n' @" g
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 5 `, W) k* \1 G+ c* n3 M' A+ L
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
1 N/ B9 {- X: T& Z5 z$ v+ F
. F6 G9 g# R; ~# D# Y( H

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
- @& }" d. N, r/ Z6 r) v9 ^0 Z2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
3 q: g$ P; x: g( Y6 @0 ?“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
& H5 O! m( f. c1 H/ b  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。) [0 `# \* c4 M
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,* W' X# p0 ]* w
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
- G+ \* R3 A! H1 A- t; [# a8 V比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。' ~9 g" M) k  Y. H
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.; o/ r/ ?& Y7 A! f# N2 `6 \
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象% A$ `; c! {# ~+ A0 s( k
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
7 Z* b& \: o, ?* H! G" M% d例1.表单触发或加载时,逐字输出字符串


" \. V, s+ W8 n; ]; N0 v3 \
  1. <html>
    3 y, L' {' x) w1 P3 G% z
  2. <head>  x8 D  I+ N$ H9 E/ J4 i, M. B# s) s
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    % d/ |! l( e6 e* y
  4. <title>无标题文档</title>
    7 X) l- G9 k8 d" j' f# `% S
  5. <script language="JavaScript" type="text/javascript">
    # T' e5 Q- B# N; ?- s! V( Z3 \
  6. var str = "这个是测试用的范例文字";& |% x+ S5 S  ?2 b7 }9 M' z1 U
  7. var seq = 0;
    $ _& L% d* `0 n" a7 s' _
  8. var second=1000; //间隔时间1秒钟) e4 T/ i& T3 F. n8 f* [' O
  9. function scroll() {8 X7 n, c- c1 d) Q) j
  10. msg = str.substring(0, seq+1);$ H7 t- U; h9 W% b1 f
  11. document.getElementByIdx_x_x('word').innerHTML = msg;5 a* b7 ^# O. l6 I( H
  12. seq++;) V5 I; D' c7 h
  13. if (seq >= str.length) seq = 0;
    , c2 H! Q0 h# S, ]  z
  14. }
    " G1 [4 u% p( u2 l2 c
  15. </script>
    7 [9 n, M9 k! d8 Y
  16. </head>0 n' a& E& E+ M% _& {! q: y
  17. <body onload="setInterval('scroll()',second)">
    * D9 W8 O- n$ ?! v! t
  18. <div id="word"></div><br/><br/>) p* i. |( K6 e0 H2 P( O
  19. </body>8 O% b0 c4 A: P& l
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
' ^( x# g4 v" [9 A
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    " \! `& V' i8 j
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    , O. p: \/ X) d& D$ x% H+ m
  3. <head>
    4 J: E4 C4 f+ M" M8 Y! ^
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />4 w) `5 y( b* ?+ |' p! p1 D* z) ^
  5. <title>无标题文档</title>7 S  J0 F& W$ u
  6. <script language="JavaScript" type="text/javascript">
    ( @5 d1 ]& ]1 y
  7. var second=5000; //间隔时间5秒钟. p* A. z6 G% z, h& l) R5 ^
  8. var c=0;
    1 M- Z4 m; Z; }. e5 Z3 V
  9. function scroll() {8 T7 a$ U. ^- K0 ]& H5 x
  10. c++;
    ) r( n& _% s2 e
  11. if ("b" == document.activeElement.id) {
    0 V2 j+ T. }  @4 P! d! ?" z* y: ]
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    5 M& H# X7 j' \  g7 p% ~
  13. if(document.getElementByIdx_x_x('b').value!=""){
    : H: j6 C; B( B8 n: X6 w# O. Z
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";6 G4 n9 y% C9 v  d$ U
  15. }/ ]) f4 k, p) c$ j: S( t% E
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    6 o, I( y0 S  u
  17. }
    - P* M2 P5 E* m9 g: @
  18. }* P* W" e) Y, i8 D% [* {5 w
  19. </script>% F, K8 P( t/ l) U
  20. </head>! |& O: a7 D8 @2 J) i
  21. <body>
    9 `4 g; G1 h! V/ P5 P* s1 G
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    # @; X. F6 e" l8 u" `3 ?3 B% t
  23. <div id="word"></div><br/><br/>5 W) M% f: ?0 y0 e% k
  24. </body>- t- Q" Y5 j+ n1 j, k
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
7 I0 @8 h0 l: m6 D6 Q9 h5 ?
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    2 l7 L: W& r! Q: m
  2. <head>
    & }4 J& R" s' K% `+ b2 m# j7 o6 S
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 t0 q$ E' e/ O  @1 U. |
  4. <script language="javascript">
    ( ~# F' h* Z" F4 k2 w" y: f6 `
  5. function count() {+ U8 @2 a( Q) G0 x3 a
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";0 M: d  v  i1 G( k
  7. setTimeout("alert('十秒钟到!')",10000)3 ?# e1 B3 B3 d9 I# L  v2 y
  8. }9 ?8 W8 C4 d3 ^) `
  9. </script>
    # @: ~$ J0 k  ?5 u5 B9 z! J3 F
  10. <body>
    1 h' f7 k" g  x, R
  11. <div id="m"></div>" j$ w4 r. U% H+ b- F; `
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    ; f& _2 A; H! _3 C
  13. </body># z3 Q1 }- T  i& W0 L' e" W
  14. </html>
复制代码
例4:倒计时定时跳转- g9 v% V( A& j2 g' O
  1. <html>
      M0 {% O. q' m  j6 Q, |
  2. <head>
    8 f! a+ f  W/ n; X( }
  3.   <base href="<%=basePath%>">+ K- I& O% b) t6 E2 Q/ ^2 z" a' _
  4.   <title>My JSP 'ds04.jsp' starting page</title>4 U5 N/ `& A& S# f2 {
  5.   <span id="tiao">3</span># p6 V3 |+ Y4 W4 f
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……5 ^% ~# ?2 j7 z
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    2 L) ^9 ]8 n% i6 R3 O3 w
  8.   <!--脚本开始-->9 o1 ^# `$ ?' y6 O5 b6 e" R" n* @; v" O2 J
  9.   <script language="javascript" type="">* n# b0 C4 d# J2 y$ |
  10. function countDown(secs){
    5 v8 P7 Y, ?' L
  11. tiao.innerText=secs;  K- j9 D7 V8 Q
  12. if(--secs>0)
    " _4 `( B3 c9 |8 ]  ~+ a4 g
  13.   setTimeout("countDown("+secs+")",1000);5 ~+ W) y5 P- M
  14. }3 S3 S! a' e2 m+ {5 a
  15. countDown(3);
    - c1 I8 ~" A; \
  16. </script>
    3 H4 t) l- [4 j/ f9 Z4 I
  17.   <!--脚本结束-->
    5 `5 i& H2 M$ z: T% A  E
  18. </head>
复制代码
例6:) n. \5 N5 v' d' u: H' P' ~
  1. <head> ( ^% T- M2 ]2 Q2 v6 e  W
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ; l; b" w* T! i8 y& q, x
  3. </head>
复制代码
例7:
7 g" E- g* ?7 J- i! X: W
  1. <script language="javascript" type="text/javascript">" W' |$ x& f# n# O
  2. setTimeout("window.location.href='b.html'", 2000);2 S0 G# \4 x# N0 ~9 U7 W$ [
  3. //下面两个都可以用
    6 |- ~. T6 r: P( ?- m4 @
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    # _5 F! [; A2 ^* y
  5. //setTimeout("window.location='b.html'", 2000);! A/ P+ d6 B! D$ G
  6. </script>
复制代码
例8:1 b% O7 }9 P- s6 ]3 g
  1. <span id="totalSecond">2</span>
    7 \. J, R' {0 Z; |! r4 p
  2. <script language="javascript" type="text/javascript">) V* j5 V2 I  B( n; G
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;; K* X. r0 q  X* h3 q" f1 }
  4. if(isNaN(second)){% p" X/ _6 X) E0 K9 [
  5.   //……不是数字的处理方法
    & W) B' Y7 S8 _3 R  E# g9 C* W
  6. }else{
    * Z$ H5 n9 s4 Z
  7.   setInterval(function(){. T; F3 h: }9 m& q0 B
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    / n; x, \8 @: Y" m- H. |
  9.    if (second <= 0) {
    0 o) g- F0 E' u( i
  10.     window.location = 'b.html';
    # [. P' E6 F1 l! R) H: p
  11.    }% U. y- H4 ?  z9 S- |- \1 }
  12.   }, 1000);6 W0 V) @4 E. m6 E0 I, H/ o! \
  13. } ' ]! [4 L4 R8 ]( h5 w; L  A9 b* {+ V
  14. </script>
复制代码

3 w6 w& ~" K; a6 P. |4 P5 W
) z! ~# {, e9 m# [  B( _* \
' k0 A0 [& B2 F  K0 w3 O; f7 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 14:06 , Processed in 0.127623 second(s), 20 queries .

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