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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 5 W( r6 G1 O) t' V& ?; t
  1. <script> % _  ~- v' |* t3 b
  2. //定时器 异步运行
    8 D1 b( `1 p5 g# v9 X4 ~
  3. function hello(){   n! p9 Z" s( E* }6 f
  4. alert("hello"); ! F7 h6 z" V7 x! A, ~
  5. }
    4 I; O& E* Y3 _% I" ?
  6. //使用方法名字执行方法 5 \% y8 L; z' R8 X( u0 N( P3 M
  7. var t1 = window.setTimeout(hello,1000); / O+ W' I- Y/ b2 E, w# z
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 ! [2 W3 W4 Y  X3 ?; @
  9. window.clearTimeout(t1);//去掉定时器 7 h3 r. }, o5 o: m. ~, H6 {
  10. </script>
复制代码
2,重复执行的定时器
, P$ [4 f! j8 }: F: |
  1. <script>
    # H" {4 @! P: k" {
  2. function hello(){ . N$ W9 K9 W) I# j
  3. alert("hello");
    ) @" C3 I, [. J/ X# w
  4. }
    " p, k  K# ]3 N2 {$ x
  5. //重复执行某个方法
    * Z& a# e. D2 l1 d; e/ l
  6. var t1 = window.setInterval(hello,1000); 0 S4 P4 X1 `6 K! a6 F' u
  7. var t2 = window.setInterval("hello()",3000); ) X; Q7 k6 Z3 t
  8. //去掉定时器的方法 % z* J! N- O/ h7 E: P  Q0 W
  9. window.clearInterval(t1);
    ' n/ s! E$ j! f2 w, A
  10. </script>
复制代码
备注:
* X% q* ?9 k( F# p$ u; I. G4 P# q1 y
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: , |, e  C* a  M9 g
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
  z! N: `: [1 X) ?  ]3 w( K3 G
  L5 }8 Q$ q$ y" }3 k/ @

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

1.倒计定时器:timename=setTimeout("function();",delaytime);) v+ x6 L- \4 L( s9 j8 j7 R
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成$ Q% H% D6 Y( D
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。! Z% m+ F% O+ m7 S
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。' Q; ~% \4 h$ N( N1 X4 l
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
  |9 U/ t  @) B1 q! n, r则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
" K% U( `; }1 p4 d比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
; P% e( ^( x! h# ~& K* v  YsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
; D; A6 N1 k, [: g9 v" ~0 s% c( \setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象- O# _9 v3 v8 Q% K9 O$ Y2 l: ?$ b
clearInterval(对象) 清除已设置的setInterval对象

略举两例。: Z- {& M8 ~3 `/ Y8 b7 D
例1.表单触发或加载时,逐字输出字符串


" x! Q& A1 Z: G# i+ t/ M7 k
  1. <html>
    , m1 ~3 s, G$ y% V' ]
  2. <head>0 {  E. H( S, H
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    7 [" @9 N7 ?3 O
  4. <title>无标题文档</title>
    ' z1 ~5 G) @9 e
  5. <script language="JavaScript" type="text/javascript">
    % ]: c7 h( [+ c5 I3 q$ s/ z
  6. var str = "这个是测试用的范例文字";
    , Z- S' J) S  `2 l6 s6 y
  7. var seq = 0;
    # }# R# Z& ?+ @2 `& D- _0 v+ Z
  8. var second=1000; //间隔时间1秒钟6 ~4 \' T$ r9 @, [* E
  9. function scroll() {" a4 K  }6 D) g4 L% p% z, h
  10. msg = str.substring(0, seq+1);+ L3 @) c* J- _
  11. document.getElementByIdx_x_x('word').innerHTML = msg;# P0 g0 p, r3 N% t
  12. seq++;4 e+ j, y2 t, C) r8 c3 f% n, \* d
  13. if (seq >= str.length) seq = 0;
    # O' M( ?' w( a2 q1 s
  14. }% f" _! Y' j$ u4 |6 u
  15. </script>
    8 q3 j; b1 j8 L2 X0 I& ~
  16. </head>2 j3 h/ v+ {1 Y) o/ b6 C
  17. <body onload="setInterval('scroll()',second)">
    $ k% P9 u5 s, G- C# O
  18. <div id="word"></div><br/><br/>- b  u3 z/ k# A& T) z; k
  19. </body>
    & |; y. F' S$ y2 v( F8 Q( y
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。# k, p' R) x$ Q1 p6 Y! W7 \3 h
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' Y+ q5 p1 Y$ j; u
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    * X4 }2 c) v: D' z' z. z
  3. <head>
    ; _. b, O' D* `& @
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />3 d4 s+ ^* L" S" I7 k9 p
  5. <title>无标题文档</title>- Y. b! o1 a* x! S5 f' l; l' z1 N
  6. <script language="JavaScript" type="text/javascript">
    5 m/ X+ k& }+ R. K3 B1 N
  7. var second=5000; //间隔时间5秒钟
    5 }, t( ?6 ]- _& N" |5 ?
  8. var c=0;. M/ W4 W3 `+ D1 |9 d$ V5 L" L; ~! a$ Y
  9. function scroll() {" o" w. u- N1 p
  10. c++;- S8 E) i3 @% M1 Q* |& N
  11. if ("b" == document.activeElement.id) {
    : w3 ^  N3 W5 N/ T
  12. var str="定时检查第<b> "+c+" </b>次<br/>";6 T! s& K- X( u" p* k) q
  13. if(document.getElementByIdx_x_x('b').value!=""){
    # v; Z* `( `% m8 a6 V  D. [
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    * D$ F% S8 x( f  O! l
  15. }. s$ P1 r: x) H- K8 }5 A
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    8 v5 ?( f5 u- l# K: z" R
  17. }  N) V) _' w" I: M+ U
  18. }
    9 t: {) ^, u& l5 R' @/ Z0 w/ u/ V0 l, Z
  19. </script>4 K) u( ~" D. H
  20. </head>
    - z; T3 g" v! r  T# A+ C
  21. <body>
    " i, |' D# H2 ^' D' ?& g: @
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>5 K, V. x6 q6 N: m: C
  23. <div id="word"></div><br/><br/>
    ! H6 J' V- m1 }8 E& H
  24. </body>
    ' R" i5 D2 @( }
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。" Y8 V3 I/ a% t2 [! R
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    3 u2 P! }+ U8 D$ x" {
  2. <head>
    ! M. A% M2 c5 ~* u7 _" N
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 a# Q" H& F3 s: Z- |! H
  4. <script language="javascript">5 l' R, i$ w2 _% N! L0 E0 X( o: X
  5. function count() {: R9 ?" k+ K) R4 a
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";$ M5 r3 e( g  {0 v% I
  7. setTimeout("alert('十秒钟到!')",10000)
    9 b6 U) Y- q4 |2 \1 t  Z
  8. }! X% Y0 {. m9 `, Q
  9. </script>8 E2 Y; p3 i0 m' @% h# j  u
  10. <body>
    ) V0 i) j8 L- M! |* d3 ~
  11. <div id="m"></div>
    5 }* w0 D8 n7 c9 E
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    4 b& u8 U' j, l# S* B) T
  13. </body>
    : b5 |, @5 Y# `; ^9 ^5 Q: f8 h
  14. </html>
复制代码
例4:倒计时定时跳转& U" z8 h" [- f2 i
  1. <html>
    ' U# W* _2 @. E
  2. <head>
    ( P! L3 |$ l0 ~( I$ G
  3.   <base href="<%=basePath%>">
    8 i4 |+ T2 b# e6 H3 ]6 ^
  4.   <title>My JSP 'ds04.jsp' starting page</title>/ a. Y! s8 J4 Z
  5.   <span id="tiao">3</span>
      h* P0 P1 I9 |: Y( O, j3 \" H
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……  @' s+ w. U1 @) C
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    " q& S8 e0 X, \% r( b9 L+ C
  8.   <!--脚本开始-->
    * m9 T' J% f: j" f
  9.   <script language="javascript" type="">
    $ v+ r2 E+ [- ^: f4 f
  10. function countDown(secs){
    4 G2 Q! c9 [( |
  11. tiao.innerText=secs;
    ; E% ]% C: v& @) b# B0 f- Q' l
  12. if(--secs>0)9 t3 j2 A9 m% S/ \7 e) k. |
  13.   setTimeout("countDown("+secs+")",1000);
    * U9 g$ w/ l, s: O7 K/ t7 b
  14. }
    : q: q* o8 r  U; s3 g3 q5 L
  15. countDown(3);" q) P2 c) y' s
  16. </script>$ P: s3 n' h: V' F$ G
  17.   <!--脚本结束-->
    & K: ^. _. U8 m3 r$ I
  18. </head>
复制代码
例6:
( F0 q) x1 V; F; h4 R" @$ H
  1. <head> + f" l& P" \! Y: J- f( L- q( d2 w
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 9 u5 z$ p/ {' h- O, J& r* m1 @
  3. </head>
复制代码
例7:6 C% L. J2 q3 N/ B
  1. <script language="javascript" type="text/javascript">
    ' |% t5 g$ m9 J6 y# S
  2. setTimeout("window.location.href='b.html'", 2000);
    0 ~$ i+ u+ l' K! _" V( w) k
  3. //下面两个都可以用9 a3 F7 S: D. f, k+ ~
  4. //setTimeout("javascript:location.href='b.html'", 2000);3 |% _0 i  @' m0 z) \4 F9 x) _2 I
  5. //setTimeout("window.location='b.html'", 2000);: e. s6 x  R  v; e
  6. </script>
复制代码
例8:
9 |- a6 n! Q+ n- k0 t
  1. <span id="totalSecond">2</span>$ ^  s& F) _, b& t
  2. <script language="javascript" type="text/javascript">
    " b* y1 C8 H( q9 y- i5 }5 C+ ^
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;- x" n# ?' c! s) O. r1 a
  4. if(isNaN(second)){
    1 S$ ^9 O& y+ B0 O5 i# Y
  5.   //……不是数字的处理方法% ~6 o+ S! n8 y: S1 ?
  6. }else{7 Q% V" m) z6 V1 j+ F( _
  7.   setInterval(function(){
      Z/ ?5 g3 ^$ h  J1 @7 O( O& g! @
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;; {$ F. X# I( Y; Z) O2 T" _0 k
  9.    if (second <= 0) {
    9 A1 _2 N% |; D7 Q
  10.     window.location = 'b.html';6 t) k* {( @/ \+ K; q& N2 a9 R/ A
  11.    }
    0 ]( P0 W7 V( }: x* c) c! U
  12.   }, 1000);
    0 c9 Z  P4 \$ P3 L4 i# N
  13. } ! R6 `7 G7 _: R  P& j
  14. </script>
复制代码
& ~" `& W  g2 e& T1 P; q7 U0 N

# |& r0 `9 Q/ X# c
/ o: X' L8 Y3 [( k1 ^+ Y, m- [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-1 00:39 , Processed in 0.081642 second(s), 22 queries .

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