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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ) f' b, X* g- D3 P* E
  1. <script>
    ! c; B- u& y4 q2 H
  2. //定时器 异步运行 ' `5 z1 l$ T: L/ g( |! }
  3. function hello(){ + w( \8 @, n  w3 z0 G
  4. alert("hello"); $ p; o' g  r0 Y$ A% _: N0 l, r
  5. } 3 h. B6 M, o4 f: |
  6. //使用方法名字执行方法
    9 c+ r' R0 U( u8 h3 ~4 [: w9 t3 Y
  7. var t1 = window.setTimeout(hello,1000); * Y6 R5 Q) N9 W- F2 D; M
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    9 ]4 s9 ~3 K# @5 t6 \
  9. window.clearTimeout(t1);//去掉定时器
    8 G. `4 D: g5 A+ v" f/ M
  10. </script>
复制代码
2,重复执行的定时器   ]9 D( U  \& L
  1. <script>
    ( [8 z$ b  O" r
  2. function hello(){
    ; N' ?  L- H! Y
  3. alert("hello"); / J8 x( ?8 A6 Y
  4. } . W# x  e( h+ j) k4 Q
  5. //重复执行某个方法 3 h6 i6 i4 U8 q# G3 s( o
  6. var t1 = window.setInterval(hello,1000); 5 e: ^( e1 v7 o  X3 Q4 ~- r4 G7 w, q
  7. var t2 = window.setInterval("hello()",3000);
    * A. _3 s& }  O
  8. //去掉定时器的方法 5 A0 p# V4 ~2 i) Z/ `
  9. window.clearInterval(t1);
    0 d2 Y: @! `  v- Q, y
  10. </script>
复制代码
备注: - A( N1 x2 d, @$ W$ S

' R8 g  V9 K: u: x如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: : ?* C' R1 {- h/ i
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。( F* D* @$ J6 C* ?9 w8 F  h

* V# l8 [9 Q( d

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
1 w5 j; o4 z: F7 m3 ~- m8 n( M2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成% T+ s* R& l' T5 M  @
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。( w, |5 [# r4 ?' [) r& X, |
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。, w% G1 E5 d* q0 O4 j0 R2 O3 g
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,  f7 Y0 U" \2 Q+ r, s9 f' p
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
: a% l5 X+ z# i1 }7 ]2 K2 z, D比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
+ \5 F% r" R/ {# u8 P# usetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.2 v2 k1 @2 O/ u: {- F3 j( [' J
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象+ @1 b/ R' j* W# [/ f: Z9 o
clearInterval(对象) 清除已设置的setInterval对象

略举两例。/ N: O  \- f3 h3 w& n6 {. J2 {
例1.表单触发或加载时,逐字输出字符串

, r7 a5 G  E! {8 u- W( C/ @7 e
  1. <html>
    & \+ T1 P3 {1 O' S2 ]# D
  2. <head>6 K3 F$ ]2 K( w1 m0 A
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 f: H/ U& V4 N4 |" V$ z7 x
  4. <title>无标题文档</title>" _. ?2 V6 A/ w* T: S, f# a
  5. <script language="JavaScript" type="text/javascript">
    ; Y; T3 v: U0 l, K# u/ e
  6. var str = "这个是测试用的范例文字";; m$ a% j! l6 |+ u8 b0 Q, ^
  7. var seq = 0;
    $ y# h  A: C! f/ x! L
  8. var second=1000; //间隔时间1秒钟( i- r) ?4 E# J& d% p# N
  9. function scroll() {5 m5 @* X: L& T+ m+ r1 i4 \+ R
  10. msg = str.substring(0, seq+1);3 \- V' ^- ~) ?# c: [
  11. document.getElementByIdx_x_x('word').innerHTML = msg;! T7 n4 l% _) E: Z# m
  12. seq++;# h" K$ D' h, u( g! _; C$ P9 D
  13. if (seq >= str.length) seq = 0;
    ! K  ~% |8 D# e' g& F8 e
  14. }6 ?# [& n  D7 s4 j
  15. </script>& ?' [/ O8 B7 f
  16. </head>
    / ?; ]$ e  {0 U: f# H
  17. <body onload="setInterval('scroll()',second)">2 B5 @' \- s6 D. {3 V2 k6 x: ]( o9 }
  18. <div id="word"></div><br/><br/>
    0 k' Z9 M+ d3 f1 w' ^
  19. </body>
    - T/ R5 Q( n4 N) y; `; Q2 ~! {) k$ N
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
, H: B, U+ s# S
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">9 L1 T( u  S  c% q# G
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    % s3 |0 b; f% }: J) |& L' x
  3. <head>
    # g' P; y9 P8 h' K/ Z' }" u
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />. m4 ^, o. }! k
  5. <title>无标题文档</title>
    2 G; R4 W! L) |
  6. <script language="JavaScript" type="text/javascript">: G, b% X/ u: ]# E
  7. var second=5000; //间隔时间5秒钟
    # ?- Q" g# }/ j! n# t3 V6 ]
  8. var c=0;3 t+ C) c% p9 H0 ~6 W- Z
  9. function scroll() {  P; t. ^7 y3 @5 [% i2 n
  10. c++;2 p0 K3 g1 Y4 g5 c
  11. if ("b" == document.activeElement.id) {; V4 u, O0 @& J$ y' G# p% @3 R7 S& x) S
  12. var str="定时检查第<b> "+c+" </b>次<br/>";! V3 y8 ^4 w, a' j9 N+ O* V: {
  13. if(document.getElementByIdx_x_x('b').value!=""){
    4 e2 P" B( ~; J
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";" l, k4 {$ [( S  e9 u9 ?# o" ~
  15. }
    8 o$ m1 {! e) P0 \2 q/ p% W
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    , m5 w) f; T, ?+ r( i2 Q; c) F
  17. }
    , d, u/ N7 x- E- S8 [
  18. }/ @7 q/ N& ]! M8 U+ S+ [
  19. </script>
    4 p4 Y. b5 R) x
  20. </head>
    & r7 a+ H" ?2 D. V  F
  21. <body>
    9 s) b' Z( m, A- }1 J/ o
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    $ V6 ?* f# y$ l6 L: L* B
  23. <div id="word"></div><br/><br/>
    $ y" V% u) O# h# j; e
  24. </body>
    % P. U: d$ M5 w3 V5 c$ e5 L
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。* A# r- F3 ^# e9 j4 `9 }! W
  1. <html xmlns="http://www.w3.org/1999/xhtml"># @5 o* t+ G" U9 `4 ]+ a9 v
  2. <head>
    9 q* G& c* n5 g3 E4 s
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    0 Z: R( B! }! O2 M. X8 B' L2 e8 F7 R( c) Y! ^
  4. <script language="javascript">* N0 x0 Q7 s* E( \8 _* J
  5. function count() {
    ; J' G% T# I! @
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";' A7 a2 T  ?/ e9 ~/ J; t: ^4 S
  7. setTimeout("alert('十秒钟到!')",10000)
    + q2 }; r$ [! @7 B% z: I+ _) S' s
  8. }
    1 K; i- E& q7 N5 b
  9. </script>
    ! Q# s* U' p9 K
  10. <body>
    - f5 [' H% ^/ k2 r" s; l. g
  11. <div id="m"></div>0 _' e% m, K! ]2 Q
  12. <input TYPE="button" value=" 计时开始" onclick="count()">: A: f% t1 @8 z* j* Y$ ]! @
  13. </body>6 G. ]7 h4 {# l( `$ A; P! N
  14. </html>
复制代码
例4:倒计时定时跳转
: `$ A% G% S7 ?* O' v  g  R5 V! K
  1. <html>
    3 f/ T1 Z1 M+ d2 \  k9 v  c
  2. <head>
    6 ~6 c, B; m3 z
  3.   <base href="<%=basePath%>">
    ; o" R& ]3 M5 f; g) G- T0 n& z) G
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    - s* {# E5 t- J" J: e" q& G4 L
  5.   <span id="tiao">3</span>
    ; r, O: M$ `9 R4 Y! A
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    / p) |, T! M( s: J* B5 f- {
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>& f. \$ P1 o; o- _; B
  8.   <!--脚本开始-->, V, i4 F( F3 t1 e% x
  9.   <script language="javascript" type="">( g! Q' Y  g% M
  10. function countDown(secs){
    ( ~" t  G8 V/ ^% Y: w' \
  11. tiao.innerText=secs;
    # U* e$ F8 j) D5 F, y
  12. if(--secs>0)
    * Z$ }7 \' b* R. W. W/ x
  13.   setTimeout("countDown("+secs+")",1000);8 ]. T6 }9 ^+ D5 K& x
  14. }) f+ P9 ^% i4 S0 R; k
  15. countDown(3);
    + W0 {$ r  r5 @6 V- a$ a
  16. </script>
    2 V. u, _" r+ q9 s0 j8 a3 Y
  17.   <!--脚本结束-->
    * E3 E$ Z* x+ E& Z) }' Q9 j2 `
  18. </head>
复制代码
例6:$ F! i' ]0 v; z3 i5 k. Q. X
  1. <head> 8 v( }) y; |* B6 W& C" a
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    8 f" W4 F; F( F' y( N
  3. </head>
复制代码
例7:; l8 F  `* |5 u) b
  1. <script language="javascript" type="text/javascript">: y5 p4 z( k' V' e. [
  2. setTimeout("window.location.href='b.html'", 2000);" p( O9 J6 D* M* d% L- A/ B
  3. //下面两个都可以用
    ) ^) x0 t( z  M2 O) u  N- I5 f2 ~
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    3 m5 v% v# t, w
  5. //setTimeout("window.location='b.html'", 2000);
    0 {. d" N- l; F1 S
  6. </script>
复制代码
例8:
. S+ \' C- }2 {3 R6 h) P
  1. <span id="totalSecond">2</span>
    / \0 f0 T7 r+ B0 r" @: v# ^& P! D
  2. <script language="javascript" type="text/javascript">$ _! B' t3 g- p# f: i# R  n7 q
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    9 F; ~7 \$ U8 k7 b$ t
  4. if(isNaN(second)){
    9 G" V& P- b4 t4 `: Q
  5.   //……不是数字的处理方法: t: I! V: R: k
  6. }else{/ G, m& g$ `8 @0 t, R
  7.   setInterval(function(){
    # X6 M* X1 K. T4 c
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;6 A% a( O# q9 g9 k" U. m4 S1 D
  9.    if (second <= 0) {
    , X3 }8 u' }# r3 R
  10.     window.location = 'b.html';
    9 h/ }% k1 \1 w- N. V/ `* f
  11.    }
    ) @- f& d8 k' l: b7 L* X
  12.   }, 1000);
    7 s5 V% e; p8 w4 r% L% p+ \8 w+ G
  13. } - m' ~: c( z% T" W- L# h$ t
  14. </script>
复制代码

- i" M7 ^6 Y! r* Q- `2 s! }1 m. M) I- ~
& s% K: z3 F! W8 v2 w4 Q! H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 23:15 , Processed in 0.072424 second(s), 19 queries .

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