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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
8 O: l: ~' B; V8 }3 v1 w3 D8 ]
  1. <script>
    ( m: e' }0 z0 K4 B) z
  2. //定时器 异步运行 5 _$ a6 F6 ^- F; G
  3. function hello(){
    4 C: T4 z* w0 }8 l( b7 d2 F
  4. alert("hello");
    ! V. c  V1 ^0 k% r# P
  5. } . F2 e/ ^5 I+ ~0 H& G
  6. //使用方法名字执行方法
    * _+ |1 V1 \" l" @2 y- }) d
  7. var t1 = window.setTimeout(hello,1000); 3 K8 w) R/ r( q& G6 C/ X3 G  K0 ~
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    ( ], g& _) E# ~+ S' ^6 V! |7 |1 L
  9. window.clearTimeout(t1);//去掉定时器
    + H/ s; v7 l7 K1 d* L" A9 h
  10. </script>
复制代码
2,重复执行的定时器
+ V2 S, d0 d: S/ r  W" U
  1. <script>
    $ m  h1 q8 q1 X3 U; A
  2. function hello(){
    7 L. I/ D! N8 C; C! e7 E
  3. alert("hello");
    $ N4 i0 u9 `# S4 m: [* f1 V
  4. } 9 s$ u. T0 |8 o3 c
  5. //重复执行某个方法
    8 E6 u3 \  ]7 |8 }
  6. var t1 = window.setInterval(hello,1000); 9 i3 F6 k$ t/ v4 k
  7. var t2 = window.setInterval("hello()",3000);
    - y$ g5 U8 y; ^$ @$ _2 R9 E/ ~: B
  8. //去掉定时器的方法 " @& G* X* W: p" b& b( y6 |- X
  9. window.clearInterval(t1); 3 f! `( k) C. e6 y/ E5 a0 z: U
  10. </script>
复制代码
备注:
; z# Q1 k7 O: _8 B, y- P- q/ R, C
( h( V! ]$ J8 Q. ^2 K如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
% n" _  b7 A' y% u" W# o可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
7 y9 {' W) a6 e/ h1 Z& O
& U3 h* Y) ~* z. ?/ ~" F& s

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

1.倒计定时器:timename=setTimeout("function();",delaytime);! g! y) [" w; n
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成( ]  W9 {0 X, C
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。% B  i! q3 ?2 v' Q/ o+ |
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
1 r* \; ?7 g# _  x1 M6 d; `比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
9 i7 G! z! `) J4 \7 n- `则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
# F% r6 ~+ S  l) x# m) K0 V% n比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。5 N) T0 d- R2 L! ^1 M- ]" h/ F7 E5 K* i
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式./ Z6 J5 X; o3 R/ \% k9 K2 U
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象5 ?( [* {5 p/ j
clearInterval(对象) 清除已设置的setInterval对象

略举两例。0 W9 p; P2 P. s$ E/ m
例1.表单触发或加载时,逐字输出字符串

/ \' i& |0 A  E# [
  1. <html>$ t0 U$ Z9 v8 X) ^9 _& L
  2. <head>
    2 L, \$ M# p4 |- j& o
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    7 k" k% D6 _' T" O: T, s# l# M
  4. <title>无标题文档</title>( E% O2 S2 ^- F0 R! j( y7 I( ~7 W
  5. <script language="JavaScript" type="text/javascript">
    3 o: I3 |7 Q  S: j6 w6 ~  s
  6. var str = "这个是测试用的范例文字";
    % ?. i4 B/ S; B! c' I% h' p+ _& {; R
  7. var seq = 0;
    # D5 W' M0 M( g0 G9 p) Y4 m5 p
  8. var second=1000; //间隔时间1秒钟
    ! {, Q- o, u0 l, @) E
  9. function scroll() {
    . c4 r- b4 y( s$ ?
  10. msg = str.substring(0, seq+1);
    / @. [8 e5 q/ o- y) r
  11. document.getElementByIdx_x_x('word').innerHTML = msg;. t4 {# ]# b! l* ]/ x# J, O
  12. seq++;3 b& G3 G7 H9 r
  13. if (seq >= str.length) seq = 0;; m8 R0 O* b+ W( f$ L+ e
  14. }
    ) A& g9 x# W& r  F* R! e' }2 i
  15. </script>$ v/ A8 o5 g6 l; J& U
  16. </head>! `! l# s* [: t5 H1 B& c% d% g
  17. <body onload="setInterval('scroll()',second)">
    $ o7 A( U0 m$ l/ t2 u2 p/ E
  18. <div id="word"></div><br/><br/>* y4 H6 I1 e1 Z! V
  19. </body>
    , D1 c) _7 O/ P1 b2 O7 E
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。. g  b1 v' A1 ~% ?6 C  T5 |6 w) k
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">( D5 d0 Y; @2 A+ g8 w
  2. <html xmlns="http://www.w3.org/1999/xhtml">  J6 |- X9 f6 D, f1 m& A7 D6 d! y
  3. <head>
    ! Z" h- c  j5 d+ r7 W! h" Z/ o
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 X) [7 Q' Y/ C: H# F
  5. <title>无标题文档</title>1 \$ @6 h! q) o# n8 C0 T
  6. <script language="JavaScript" type="text/javascript">
    ( M* J3 |; N" g9 F" ~+ z" A, u
  7. var second=5000; //间隔时间5秒钟
    4 c6 @2 t; a' g1 f
  8. var c=0;
    # p$ F/ i9 K- P
  9. function scroll() {+ l# x+ _5 \* a$ o
  10. c++;
    * o; Z. i1 I9 O  L# y" e) Q+ ]% x
  11. if ("b" == document.activeElement.id) {# H0 G# f/ T3 W2 ]5 [0 W
  12. var str="定时检查第<b> "+c+" </b>次<br/>";2 z: Q* [* ]5 G  ]9 Q; B
  13. if(document.getElementByIdx_x_x('b').value!=""){! F# g8 z2 G0 E
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ) Y2 H, i: z% o9 ^
  15. }; t+ N, Y2 g9 E5 d- F
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ; Y2 a" l- G* V5 n4 N
  17. }0 \) Y% W1 G& x% z
  18. }9 G+ I' {* A0 r, n4 O& C
  19. </script>
    0 {" e- ?( p7 v4 Y) Z" T
  20. </head>
    6 S$ X. L9 c; R  c
  21. <body>9 g/ ]8 ]; Z& F; |/ d0 T: l- M3 H
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
      Z- X7 ]0 U' O$ z
  23. <div id="word"></div><br/><br/>
    : x  W9 A  A$ k! a3 P1 L" J! ^
  24. </body>
    ) T4 |3 [4 B& r2 u$ k' h. F
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
* ~/ R2 X& |# x% w. h" ^4 I
  1. <html xmlns="http://www.w3.org/1999/xhtml">2 {& P9 U; [2 n$ T
  2. <head>
    6 N/ z- k1 c, L) k+ u% ~+ L
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />/ B/ Y! P% s( e% _
  4. <script language="javascript">+ T! `' u3 j. Y
  5. function count() {
    6 ^$ Y7 w9 z: U; i$ C" |0 L' ^$ i- V
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    , q% T0 `1 y5 Y5 q2 ^
  7. setTimeout("alert('十秒钟到!')",10000)) K7 `7 R+ d+ W" x! Y
  8. }
    # b' U% \9 A- L- a) {3 Y8 d
  9. </script>3 [' H, }$ o9 `
  10. <body>
    / {$ }) Y0 X/ H0 [7 S: U8 l3 X# w: H1 K
  11. <div id="m"></div>- P) K, [3 _* d! L  H# O' |
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    ( V8 D% g) B' r/ t
  13. </body>& E/ k" Q' {4 U# c
  14. </html>
复制代码
例4:倒计时定时跳转  b% ]! ]$ g  m$ q; S% ^6 L1 Z' n
  1. <html>
    ' Q9 N; Q5 @! F
  2. <head>, e6 R: a; b; Y3 e- u, M. ^& W
  3.   <base href="<%=basePath%>">7 G) \- e; M. m. _" ]) M
  4.   <title>My JSP 'ds04.jsp' starting page</title>4 u" H( R9 f2 P1 h$ W
  5.   <span id="tiao">3</span>( F" B% L& O/ D5 R
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……& f$ q1 p/ h+ c$ H; c
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    3 A/ E0 {: p2 R1 G$ j
  8.   <!--脚本开始-->
    2 Q6 q4 d* m$ m9 l4 ^# T3 P# T
  9.   <script language="javascript" type="">. L9 y2 W' I+ K& ?1 Q/ k5 e
  10. function countDown(secs){
    1 ~% E# q" |- E) K6 R/ U7 i# d+ m
  11. tiao.innerText=secs;
    0 X0 T: j! P; d1 E# s) ~
  12. if(--secs>0)
    ( c: _; k6 t- m* O3 e. A# J. X
  13.   setTimeout("countDown("+secs+")",1000);  b( e5 e7 O  |
  14. }
    4 X+ L: n) o' E+ P: V/ R) p/ x2 X
  15. countDown(3);
      w2 @. a/ ^+ s4 N2 ]3 ]% N
  16. </script>
    % i% C- H; U8 R: u# e" g) z8 s2 a- K. P
  17.   <!--脚本结束-->
    % ~" J8 D, ~$ Y  Y
  18. </head>
复制代码
例6:
2 x7 v3 W/ N/ a8 F- R/ I: C6 i
  1. <head>
    2 ^. a- H  \! l8 s' i! a$ ]+ m
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ) m6 M: k- n: i
  3. </head>
复制代码
例7:
+ [" s" A' X  p- x' F
  1. <script language="javascript" type="text/javascript">
    3 `) f* M9 G( x- L3 x0 s& Y& o
  2. setTimeout("window.location.href='b.html'", 2000);9 t  u5 K- \6 T5 D# z7 B8 q  _$ y
  3. //下面两个都可以用3 B. J  H  @2 {/ E9 ]
  4. //setTimeout("javascript:location.href='b.html'", 2000);9 c+ o( @9 J6 Z: ~9 Z& H) o! n
  5. //setTimeout("window.location='b.html'", 2000);: |2 [; t1 M. r4 M) `! r$ j
  6. </script>
复制代码
例8:
7 Q% r7 b$ X. u! d& b
  1. <span id="totalSecond">2</span>5 `3 h) ^. \% s# \7 p/ T2 ?
  2. <script language="javascript" type="text/javascript">5 b- i- I. N( @6 q2 L+ j
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    9 T  A- g' _3 s& o
  4. if(isNaN(second)){
    1 W7 M0 {% j. r) [8 q
  5.   //……不是数字的处理方法( d7 F& g5 J4 [- R
  6. }else{
    + t' ]" A- F% Z! ^  _# f1 [0 z
  7.   setInterval(function(){
    ) y! |4 f% i: K( Z0 I
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    % `2 `( N% Z* ?6 T
  9.    if (second <= 0) {
    ) k; D! g% q; {( ]4 v
  10.     window.location = 'b.html';0 q8 ?) c" V7 U0 ]  n9 x) }- l* _
  11.    }
    2 Q+ f5 _# O& s$ S$ K, ^( ^
  12.   }, 1000);# X3 s# ]3 c  R7 G+ y& M
  13. } + P' T3 t3 A, W& r
  14. </script>
复制代码
' X: I8 M6 g/ h8 d1 G2 X$ z

3 J3 x! q# J/ ~3 J
) D6 C- Q" b% k* P' |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 14:56 , Processed in 0.139649 second(s), 19 queries .

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