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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ' @3 n- c! Q6 {( m9 A
  1. <script>
    6 ?* f4 e' g& `, j  v
  2. //定时器 异步运行
    1 @1 n7 m/ v7 |5 y9 Y  z3 H
  3. function hello(){ # X/ r. [5 u: @+ {9 F$ a
  4. alert("hello");
    * i$ I3 h4 n8 {  [
  5. }
    1 }$ K5 k2 T. V/ c; ^
  6. //使用方法名字执行方法
    ; r( j# [! l5 g4 d( ^
  7. var t1 = window.setTimeout(hello,1000);
    2 o1 y4 d; h: \2 C0 m3 l* J
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    0 P: {  Z- M. H: Y8 n* {5 K
  9. window.clearTimeout(t1);//去掉定时器
    & u4 n7 }2 l+ Q' W" G$ g6 ~  ^
  10. </script>
复制代码
2,重复执行的定时器 : O0 B, n% A. @
  1. <script>
    . ~, L! g- J% b, v4 w% |, o
  2. function hello(){
    ) _2 X4 L1 ]9 L' c
  3. alert("hello");
    1 l5 Q) F5 I+ P, x5 Y
  4. } $ n1 v) q, q  ^2 O8 {, r/ R) R
  5. //重复执行某个方法
    1 d$ N8 d  N7 k4 _
  6. var t1 = window.setInterval(hello,1000); 9 H7 `. J6 `% b
  7. var t2 = window.setInterval("hello()",3000);
    0 v6 d/ L! d, B& B
  8. //去掉定时器的方法 ' [0 X+ F. z. k% r" W
  9. window.clearInterval(t1); : I7 e: r- Z+ n. d
  10. </script>
复制代码
备注: / E' U+ u! P0 }2 G

2 f* y! T" L, o9 L* L' ]% i如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
* y' I! h& B$ m/ t5 ?可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。7 J) ^" J% ?% w( ?5 Z
# P( A  v6 U/ x/ |

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

1.倒计定时器:timename=setTimeout("function();",delaytime);& j6 w7 y9 ^# k
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成' q7 r% I' H" m* S7 W2 k- V5 p
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
) D8 m/ B3 ?  P. X  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
: X5 h6 O! D( F+ g* p! @+ B比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
* @  @5 y: i& l" J8 U# H' i; H则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。) p1 e9 ^# P; ?0 c* s" c. [% G
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
7 r- q; Z4 D7 Q% o- X6 ~( O  DsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.9 m/ a0 o, P* ^6 E3 b' k
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象* R3 G3 w) {# A8 {* s
clearInterval(对象) 清除已设置的setInterval对象

略举两例。/ b. S9 C# \0 t
例1.表单触发或加载时,逐字输出字符串

/ ~+ E; n; z; Z9 F9 L
  1. <html>
    $ e0 R- Q7 H% g# s# I
  2. <head>
    + I: i3 O( P: \
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />6 E7 i$ @7 Y) ]& \
  4. <title>无标题文档</title>
    : E7 p; V, O- o+ x, c
  5. <script language="JavaScript" type="text/javascript">4 S& e; O% [: m" w4 W
  6. var str = "这个是测试用的范例文字";& }: \! ~2 f4 ]' {; I6 D' l; ?
  7. var seq = 0;7 E# q: V- i: p7 I
  8. var second=1000; //间隔时间1秒钟; O% M: W0 ~# p- o" `+ v, a
  9. function scroll() {
    + U% X$ i6 ], s& P0 H
  10. msg = str.substring(0, seq+1);! R. L4 p: Z1 L4 [4 V, u
  11. document.getElementByIdx_x_x('word').innerHTML = msg;5 _% E* l* B  E- {/ i, c
  12. seq++;+ ]; @6 `: U1 ^& ?: n. g1 o0 \
  13. if (seq >= str.length) seq = 0;
    ' e9 v3 f! z1 Q6 V8 D$ w
  14. }9 l: {2 @1 l& L
  15. </script>1 J& Z3 B! i9 J
  16. </head>
    % T! v. h& P: a2 c9 X
  17. <body onload="setInterval('scroll()',second)">
    - a* e! S  k  r7 y
  18. <div id="word"></div><br/><br/>
    # @+ Y  ^' h/ d, D
  19. </body>2 O) g0 I3 y# W  ~5 h# ~: r# I- f
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
2 S+ @! |. N" a: T* Q1 Z+ H$ J
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4 o% @) p+ t9 Y2 l+ P/ V, d
  2. <html xmlns="http://www.w3.org/1999/xhtml">5 S8 ~, ?/ h5 h2 t! M1 w1 w
  3. <head>
    & X$ x# Y; D! G6 E  f1 q
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    1 m  U" e  z  A: S" `
  5. <title>无标题文档</title>
    ( B. K5 F5 e! x5 k
  6. <script language="JavaScript" type="text/javascript">
    " l% B6 ^; ~5 G% E1 M% ]
  7. var second=5000; //间隔时间5秒钟
    ' C! Q6 C+ g* @1 c: ~2 y- `
  8. var c=0;  M6 q/ H% {0 Y( v, @. w8 Z1 p, U
  9. function scroll() {* U# U! F9 q6 B( c, Z6 ^1 b* }
  10. c++;% M9 F5 k; x6 e. p( O* {# ]
  11. if ("b" == document.activeElement.id) {
    " D2 l; f4 a' \. n1 a$ P1 O
  12. var str="定时检查第<b> "+c+" </b>次<br/>";$ ?" W3 B) e. Z# P6 ?' k8 ~
  13. if(document.getElementByIdx_x_x('b').value!=""){
    7 h8 i( w7 H$ ~1 ^0 k* y4 D
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";! g) A; ^! o( v
  15. }3 c' ?) I5 @' _/ f  K, x
  16. document.getElementByIdx_x_x('word').innerHTML = str;  o0 j$ b  ?* L9 C
  17. }, k* W+ w- ]3 f/ a( Z# c) P: X
  18. }8 e; @/ r  q: L( X& a
  19. </script>
    . t5 u1 d$ D  o# r
  20. </head>2 M7 b" U% R$ J; m( q6 u
  21. <body>, Q7 o6 Y, s1 m9 o/ }9 ^
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    2 `. j; U# r, r& P; ]9 l
  23. <div id="word"></div><br/><br/>3 g! k* x3 v! o2 [
  24. </body>% |- {; }2 Y% M: K! A, D: K1 N
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
$ L/ h4 O/ e0 M5 q
  1. <html xmlns="http://www.w3.org/1999/xhtml">  a, ]& I8 I0 M+ C& R
  2. <head>
    1 }0 }$ {" z$ ~  h8 k0 @) ?
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    0 h% [7 P% e7 \) L: ?7 ~" t' ~( y) j+ H
  4. <script language="javascript">7 q& F+ [9 v: K( ?& i6 P
  5. function count() {5 f  l* k, N1 i- M) s- F# q$ G: P
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";6 }( e' i. e- m6 h- g. [3 H
  7. setTimeout("alert('十秒钟到!')",10000)
      x( q" I" d; J, a6 A; r  T
  8. }3 _5 D4 D7 Y  c4 V6 K: N( q" _; k2 O
  9. </script>
    # _4 C; W. H& b. i5 H# L
  10. <body>6 K! {( Y- W% J; A' g5 E
  11. <div id="m"></div>
    ! ]) n9 }+ V& s% Z/ z
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    & Q/ I; R/ ?1 u2 s( J% N
  13. </body>9 A) q! S/ l* _; x5 [
  14. </html>
复制代码
例4:倒计时定时跳转
6 V3 Z* E8 K* W. k: _- U/ @
  1. <html># ~! z, V  H5 O' f* K. K% k
  2. <head>
    ) G) |4 v8 k# I" m# J% u
  3.   <base href="<%=basePath%>">
    $ R1 i# ]0 t- Z# Y4 I4 E7 b
  4.   <title>My JSP 'ds04.jsp' starting page</title>: U3 N: \- W0 @5 P1 [
  5.   <span id="tiao">3</span>0 A  b% \+ D1 O
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    0 m9 K( l# b2 q5 T9 J) b9 ?0 e
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    : d9 [/ v1 e0 V5 _
  8.   <!--脚本开始-->
    ' X: s2 L9 f4 F
  9.   <script language="javascript" type="">
    ' L7 {8 t( R( S5 x! O# l
  10. function countDown(secs){+ S5 M. R& n* T7 o9 f" E' u6 t
  11. tiao.innerText=secs;
    7 a: J1 Z. {( e  N8 x2 d
  12. if(--secs>0)
    ; |/ O+ ]( d1 ^" E( a: g; o. R9 L& V
  13.   setTimeout("countDown("+secs+")",1000);
    3 C6 Y5 h" R' j: B( O
  14. }
    " J# |) v/ O. c# ^/ M
  15. countDown(3);. I! M* B/ M0 i8 R6 \! o
  16. </script>
    , a- w  |: Y  S5 l
  17.   <!--脚本结束-->: u- m! D- n; B! @
  18. </head>
复制代码
例6:
$ g5 h' ?! u9 p( ?- j# E- i
  1. <head>
    # ?8 O5 A" q* V4 F6 q8 D
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 8 p. a/ `" g# W. M( j$ X
  3. </head>
复制代码
例7:
% ]5 J' {) N) {/ K
  1. <script language="javascript" type="text/javascript">
      A! U- N" Q6 z7 g, N+ ]$ H% k$ s
  2. setTimeout("window.location.href='b.html'", 2000);
    # f1 F' c& j5 l2 u9 `( R8 N
  3. //下面两个都可以用
    - _+ h* x, v9 w' k" |, M9 o$ N
  4. //setTimeout("javascript:location.href='b.html'", 2000);) c3 |# g, B1 o% n6 U' `/ U; _
  5. //setTimeout("window.location='b.html'", 2000);4 e. p+ x. l: y1 `5 S( Q4 s# l
  6. </script>
复制代码
例8:$ {) [' X; \$ Y4 P1 f7 |0 ^
  1. <span id="totalSecond">2</span>/ I" k4 j7 ^7 M$ A0 E5 q! J
  2. <script language="javascript" type="text/javascript">9 S6 f7 J! o* |8 w' e
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    5 O0 ^% [& A2 `- ?- A2 w6 X
  4. if(isNaN(second)){
    3 X( f, Z: |1 H9 s) O3 Y1 h2 \
  5.   //……不是数字的处理方法
    8 \/ j. Y1 g: h; I5 c
  6. }else{
    " s0 j9 X& ^& Z3 ]& C
  7.   setInterval(function(){! e1 S. p9 V3 G# ?- v* b
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;4 N6 O6 n( {  Q
  9.    if (second <= 0) {+ F* l/ ]# p9 J
  10.     window.location = 'b.html';
    / M5 Q. @% o6 m( p  S
  11.    }' @5 z. m* f9 p4 [2 B; g; |
  12.   }, 1000);9 L: u& u9 X$ D% q; p4 w3 @
  13. }
    4 h; Q$ f6 K. U7 ^! U% [, }% @( c
  14. </script>
复制代码

( [, r, w) Z5 e5 t; s
6 |; H# U& [, k: n. R
* K/ |$ S& E" ]8 U2 f" q* ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 00:01 , Processed in 0.088240 second(s), 19 queries .

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