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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
- x+ [, |' @" d$ q! M) |/ D2 w7 o
  1. <script> 8 V' h3 ~1 D  i% H* y. e8 J
  2. //定时器 异步运行   y. ~! R, i& m5 P5 J7 s
  3. function hello(){
    & Q; O. n# p" f% ]
  4. alert("hello"); ! ~: w4 @! B1 J' z1 `  Z9 w! ], _
  5. } / b. @% {. L, H/ k. [- g
  6. //使用方法名字执行方法
    4 }: X' H" b( ~# \% f8 Y2 F1 w0 c7 @, \2 w
  7. var t1 = window.setTimeout(hello,1000); * `5 Z! W$ c* o! g2 g: l5 ]
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 " l- U5 ]) _/ ]  V! G4 ?
  9. window.clearTimeout(t1);//去掉定时器 5 a/ _4 ^; i: T& g+ U
  10. </script>
复制代码
2,重复执行的定时器 6 }! K- f: }, \; t9 o% K$ }
  1. <script>
      f4 S2 Z$ I: t* |* v" h2 [- ]$ {
  2. function hello(){ 7 P' h8 E3 C; D/ P4 s
  3. alert("hello");
    + f+ z# E; J, k1 j; a& q
  4. } 0 q7 H6 x# ?5 W" T
  5. //重复执行某个方法
    % R; _7 {7 `6 K  m
  6. var t1 = window.setInterval(hello,1000);
    2 Z3 \0 v9 S6 N* m6 m  A  |3 D
  7. var t2 = window.setInterval("hello()",3000);
    # W' d" T" [% w& Y+ t- H
  8. //去掉定时器的方法
    ; M2 y- ~% D" R. R
  9. window.clearInterval(t1); ! b- A9 U5 Z  J  N) j" q
  10. </script>
复制代码
备注: . b; E" T" M5 |/ [2 U- G

. X) m# Y6 s$ s/ ^1 q如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
, f! b; G* H3 V) n7 K( O5 k可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。+ J- d" n1 o1 _, T
. Q/ P: v7 }2 h  t4 G$ l+ h

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

1.倒计定时器:timename=setTimeout("function();",delaytime);; S/ f6 z% h/ f
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
- Z! P4 N% J! O6 [/ l“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
5 j0 M3 b% h" N( B# Y5 l! b  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
. d1 ^' H+ s) J: _; l) N" t! Y比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,, u: C) I( `6 Y0 R
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
8 G0 w4 X# L$ d, w+ h5 l2 W: @比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
! ?$ F" A5 ~+ d9 K: z6 UsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
# _# o: W: m, U6 T! r/ ^) esetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
* h7 I3 d. P/ S( RclearInterval(对象) 清除已设置的setInterval对象

略举两例。$ l( r! Y5 d+ H3 F
例1.表单触发或加载时,逐字输出字符串


2 s, B8 W  z) W
  1. <html>9 j* t# ~1 [9 [# f$ s
  2. <head>
    4 L! B$ q3 Z1 c2 c8 g1 F
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 {2 f# s2 ?8 |9 |- s* _
  4. <title>无标题文档</title>$ K# ]2 e; g" }, K0 \
  5. <script language="JavaScript" type="text/javascript">; r0 I9 b: U2 p8 B3 G2 X
  6. var str = "这个是测试用的范例文字";
      A; c( z" F$ \
  7. var seq = 0;
    " Y0 x- l: A5 ]2 Z- ~6 S, y; N
  8. var second=1000; //间隔时间1秒钟
    ! @# w2 u  u+ S4 Z- v  b
  9. function scroll() {
    3 c7 w+ }5 v* w5 ~
  10. msg = str.substring(0, seq+1);
    + Z" F5 _; Y2 u, j/ ]0 S
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    7 a* k5 L5 t* q) P5 C7 E
  12. seq++;% |+ c2 y7 I  P1 r, l
  13. if (seq >= str.length) seq = 0;, o. L9 M: U) T3 j9 R- {6 O0 a
  14. }
    . @. x/ e* _  Y' J! H( Y; ^
  15. </script>
    6 N; x# t) V& l. ^
  16. </head>* H3 V% K% ]. b, {
  17. <body onload="setInterval('scroll()',second)">
    + n& q5 i# N& W  l) P
  18. <div id="word"></div><br/><br/>
    & s: `* T# w- x: g0 \3 {0 G  A
  19. </body>) W7 Q1 `8 e3 V: d
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。& O# \$ j9 v/ h% Q3 W: e
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 N) z4 u6 Y& U, J
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    8 e9 r. T5 T- i) R! N6 Z' a
  3. <head># |  {4 K( c, Y+ Q* m% Q
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />6 z( M' G' {* i4 n5 X/ s  {$ \) ~
  5. <title>无标题文档</title>8 |9 E8 Q5 m' T
  6. <script language="JavaScript" type="text/javascript">3 Z* z) R9 V" [( a% U
  7. var second=5000; //间隔时间5秒钟* p4 ]' b. A1 ?- H7 a
  8. var c=0;
    $ o+ }' q% V1 C6 V# T. p
  9. function scroll() {: V* `: F/ u! }- T, E0 W
  10. c++;
    1 B) M3 _7 @% d* P  n4 S- w0 E9 s
  11. if ("b" == document.activeElement.id) {
    0 G0 w; O" _% t) w/ ~
  12. var str="定时检查第<b> "+c+" </b>次<br/>";) _4 s* J- E4 G% g/ J( L0 K
  13. if(document.getElementByIdx_x_x('b').value!=""){
    4 T, _; `4 g$ ^: M& C- g0 N- U
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    . a. H( L1 M% d  f
  15. }
    3 x- Y0 I0 X- H0 H5 q  E1 a
  16. document.getElementByIdx_x_x('word').innerHTML = str;9 `  l( f) }/ {% |6 U& E; Q
  17. }
    9 M  K2 t- h  D! j5 E
  18. }
    ; v3 K- U* Y( `; n$ p4 [0 ^& m
  19. </script>
    2 t7 y9 _1 D8 W* t3 R& u0 K
  20. </head># p0 K0 ]( @- g* \" i/ U
  21. <body>' o! b9 ]/ a+ ^
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    6 c* D, E' ]1 P' G" p* ?
  23. <div id="word"></div><br/><br/>) J2 K' {# h8 T6 t& L; W
  24. </body>; f. }6 h; |+ H3 g' _
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。0 P2 o6 _2 C5 [
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    # y) u( o( H# ^/ i/ v- c
  2. <head>5 N* A7 k8 c4 [/ {$ V
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />' ^8 N6 c' X0 f8 g- o" F5 D; n
  4. <script language="javascript">
    ! }1 W7 _" m' g7 m8 g! o
  5. function count() {
    $ X# n* C) |; q; [! F4 U
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ( e  w! l& e& F# m6 Q
  7. setTimeout("alert('十秒钟到!')",10000)4 s1 m$ N1 u/ u% B# \- \
  8. }
    1 x% B  I: Z, ^# P6 t
  9. </script>8 B, J7 L# F3 j2 j/ ~
  10. <body>
    $ G  ?: P* T3 n1 I
  11. <div id="m"></div>
    2 M+ Z0 c2 `* [6 {  Y' n# l
  12. <input TYPE="button" value=" 计时开始" onclick="count()">2 r; v) y. U, w) \5 c& Z, F; {
  13. </body>8 u2 @3 j5 a/ y/ n7 L
  14. </html>
复制代码
例4:倒计时定时跳转& `4 d$ X% e' u1 f( l( }) ~0 @
  1. <html>
    1 U* B# `+ F/ r5 M( y( c
  2. <head>1 Y# Z% o6 x+ H% Q7 x0 K
  3.   <base href="<%=basePath%>">2 s$ w0 I  K" \& t# \3 U& d
  4.   <title>My JSP 'ds04.jsp' starting page</title>2 X1 B' x' M4 Y
  5.   <span id="tiao">3</span>& f5 t) j: R% w8 Q6 A6 j2 t
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    $ ?' G7 E0 h0 k& I
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    * u+ Z  G9 e3 ~! O
  8.   <!--脚本开始-->
    ) ?! X' R% W  S; j
  9.   <script language="javascript" type="">5 J+ w- p8 D8 G2 y; T( s: g
  10. function countDown(secs){7 C" f0 E" z& J6 ^
  11. tiao.innerText=secs;
    / y+ t3 k) q5 I" u7 N% R
  12. if(--secs>0)& h, h4 J  Z$ X$ e
  13.   setTimeout("countDown("+secs+")",1000);4 L- T5 |; `& f, g  X
  14. }9 k, C# R; e2 d- i, L
  15. countDown(3);
    - X' X. D; {9 t" k# d; Q6 h
  16. </script>$ X% L# m! `& i& f) ~; E, q
  17.   <!--脚本结束-->
    . B  K7 Q1 k# v! X
  18. </head>
复制代码
例6:  P% K/ j+ L9 Q) D
  1. <head> ! j, @3 T+ T7 G( j& F: i
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ' ^3 l% ?) g9 d( Z7 r( @
  3. </head>
复制代码
例7:
8 q; q& k: J0 l0 I  q
  1. <script language="javascript" type="text/javascript">
    5 t0 v9 h  Z# u8 B% P6 ^" S
  2. setTimeout("window.location.href='b.html'", 2000);% w, f4 u; U. W: H
  3. //下面两个都可以用
    8 y* F# k  X" v
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    % t3 \3 [4 a+ e0 a& Z; A! N$ ^; C
  5. //setTimeout("window.location='b.html'", 2000);" o/ u# C2 C- v/ U
  6. </script>
复制代码
例8:) P1 \$ K3 e$ V
  1. <span id="totalSecond">2</span>
    , R8 l5 E. d- R1 f# I) A  b
  2. <script language="javascript" type="text/javascript">
    $ m+ {5 ^$ H9 g- S
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;  l+ Z  q$ z  l4 @$ `
  4. if(isNaN(second)){( w; y, w# c$ _3 x
  5.   //……不是数字的处理方法
    / A% Q, o) U$ C' n
  6. }else{
    * A/ _$ S2 M& B) f. E  e/ X1 x
  7.   setInterval(function(){3 o$ Z3 w" a$ c3 y$ w1 Y. L
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;+ A' h0 {* g1 r1 e& Q
  9.    if (second <= 0) {' H; D) o7 f. U- Q
  10.     window.location = 'b.html';
    # v: \: E4 o( p& U
  11.    }3 [/ X7 T- g( T% c5 e
  12.   }, 1000);
    3 U2 ]: Q, i9 x- a3 Y% a
  13. }
    , d3 v! x  `" |
  14. </script>
复制代码

: x! T& s. ~- Q5 G" @% C6 L
& M7 B( [& M0 Y' m2 G
$ L+ a4 V; z9 N0 v; ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 23:54 , Processed in 0.057719 second(s), 21 queries .

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