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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 % u( m9 C1 {4 s$ |5 [9 o+ b5 h
  1. <script>
    6 T9 z+ M9 i" b$ z5 ?* a7 m# W
  2. //定时器 异步运行 ' \) ]7 x  o8 w8 Y" ?
  3. function hello(){
    5 q$ q( s+ B& d, W2 o9 s7 O, R, X' i
  4. alert("hello"); # ?# H$ n5 b9 }% B! T
  5. } + e# z; {% q- `+ k' I, D
  6. //使用方法名字执行方法
    9 N  _5 F: d1 p5 ]/ i) t
  7. var t1 = window.setTimeout(hello,1000);
    . \5 m: _' \  C1 N1 u& Z
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
      M# o& }8 w$ C
  9. window.clearTimeout(t1);//去掉定时器 2 F. G2 q4 I( S1 u3 f9 J
  10. </script>
复制代码
2,重复执行的定时器
6 v8 x" c$ o1 P/ I
  1. <script>
    / z& J- C4 F  I
  2. function hello(){
    " Z3 y7 j" @+ P+ b7 B8 q  s( U
  3. alert("hello");
    / V0 Q* K1 j8 ^
  4. } $ L: ]4 I/ O$ a7 W
  5. //重复执行某个方法   g1 k0 o) W% f5 D
  6. var t1 = window.setInterval(hello,1000);
    3 ^) C! R6 x% c
  7. var t2 = window.setInterval("hello()",3000); $ z2 U4 X; v% ?) ~+ f
  8. //去掉定时器的方法 + u) L8 [( D7 S* G) J) G2 j  E- ^3 \
  9. window.clearInterval(t1); ) H$ E' S9 n4 [( e( ~9 ~2 F4 j
  10. </script>
复制代码
备注: % n6 y2 X  R1 A. e/ G/ v

6 A/ O$ O' t2 ]2 A如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: % J$ `8 ?- w! g9 T) u
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。, K9 w+ R6 P. p+ C$ t3 I2 c
2 s, k9 f3 ]# p9 w0 s

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

1.倒计定时器:timename=setTimeout("function();",delaytime);$ g' X3 @) i. E. ~) h
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
0 k+ J7 l- i' P- v“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。! H8 H4 L9 }6 j+ I  D& D8 S- ^
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
8 N" u$ I5 y! b3 A* f# V, b比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
5 e: N, c9 M# X+ c# R# z8 r; I+ O则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。. _0 j' g! w, h, {; k! F' l
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
  U3 n$ p1 ?: @$ v3 a! L# rsetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式." M  O- R6 W. p. C6 j( t
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
8 I% j! M2 S$ c  d: _clearInterval(对象) 清除已设置的setInterval对象

略举两例。# p/ ~3 u# V2 E
例1.表单触发或加载时,逐字输出字符串


5 @/ v- O2 O( W( Z& c
  1. <html>
      U: T' m8 O' N( v* B( ^; ~
  2. <head>, ~! R3 G4 d& n* }! S( f, ^
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />" e# {, G6 ~6 z! U
  4. <title>无标题文档</title>
    2 j5 l1 X# _- t9 C
  5. <script language="JavaScript" type="text/javascript">6 N! ?  r2 `& n( G' R+ G$ e
  6. var str = "这个是测试用的范例文字";
    9 r; R. D/ T5 O8 V$ C# f! s- J7 i
  7. var seq = 0;" i* T2 A- P+ d( q0 n
  8. var second=1000; //间隔时间1秒钟+ a2 U8 x, n( Z. F# W
  9. function scroll() {) [5 q/ ^$ v) `& {! P* ^
  10. msg = str.substring(0, seq+1);8 r# L9 M3 l5 ~! |
  11. document.getElementByIdx_x_x('word').innerHTML = msg;' `- ^2 G' ~- [: ]. ~
  12. seq++;
    7 G9 _7 o2 h" O5 d4 L, S
  13. if (seq >= str.length) seq = 0;: u( L; N: G! i8 y9 A3 {
  14. }
    ( r6 m( h0 G% K$ m
  15. </script>
      f% j3 i7 p4 {9 }( g/ H( Q8 f
  16. </head>
    % e' o2 z' U1 j( N9 L; d' E+ q( V
  17. <body onload="setInterval('scroll()',second)">
    1 @! D+ t! s# P
  18. <div id="word"></div><br/><br/>7 I0 U! s0 |' B, |
  19. </body>, J2 e; ^, _3 w& ?4 I
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
2 A7 ]6 p/ e6 O' n: Z
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">% {$ T7 L1 w6 ~4 Y# s( d3 Z
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    0 N% Y0 e% v9 I4 Z' n, y% {2 p. L4 I
  3. <head>9 k) ?* u# w3 ?& k! e
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />4 j! A6 _; I+ z' ^+ h; a! Z$ q& L
  5. <title>无标题文档</title>; j( s2 }$ e2 v) w3 j0 r2 _9 p
  6. <script language="JavaScript" type="text/javascript">
    " s5 ]+ ]4 V( H/ p+ h+ r2 }+ B4 Z$ n
  7. var second=5000; //间隔时间5秒钟( F- S# E5 a2 g: S
  8. var c=0;, j5 {- q! k: j" v7 b
  9. function scroll() {
    ( |' J# M  w; T0 `7 P
  10. c++;0 H- U! j: C) g$ X- Y$ u4 v0 }( _
  11. if ("b" == document.activeElement.id) {7 \/ [' ^: R$ {  o* `9 W$ s- Q
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    , }! Q& H' y7 m# C8 s8 Y/ P
  13. if(document.getElementByIdx_x_x('b').value!=""){
    * o$ [$ h7 [: j* ~  `
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ) Q, X- z. N$ Q
  15. }
    ' b" L' f. n( [- y, e. X
  16. document.getElementByIdx_x_x('word').innerHTML = str;2 Q9 H5 a6 ~/ R" P
  17. }
    2 r5 }' o+ {. S! ?0 r9 _) j
  18. }+ _; S6 Z% B1 {5 g) Y
  19. </script>% b) l/ u. _1 V( F5 s
  20. </head>
    % z! A" S7 k( D6 t
  21. <body>
      h8 R3 W& L3 C( `, ?: ~4 G
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>2 H  i6 y" ^$ F
  23. <div id="word"></div><br/><br/>
    , A) q1 H; ]/ W
  24. </body>
    8 H5 \0 B+ ^& W& g% t* m0 j& B) W
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。% V! T8 m8 h; {7 ]
  1. <html xmlns="http://www.w3.org/1999/xhtml">( H; P( l2 H4 Z; w) k5 y
  2. <head>8 i' I3 w8 a  b
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    2 e1 Y% Y7 S( S4 n
  4. <script language="javascript">, M/ i  h: Q5 M( |( {
  5. function count() {9 P7 j! x1 d4 ?+ G' |/ ~
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";; Q6 V- {) p* Z* G# o, }3 ?4 O4 {
  7. setTimeout("alert('十秒钟到!')",10000)" S8 X# Z$ _% H0 }
  8. }
    : d8 n: M/ R$ @& T9 w! E9 k
  9. </script>4 C0 `) U$ A; m  P
  10. <body>* I) C) N# ?! ?: ~4 p
  11. <div id="m"></div>+ u$ J' S+ P4 A5 j# p
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    7 W9 I! U' E- U) b- H: E. x# Q
  13. </body>; g  x- y( K% Z0 M
  14. </html>
复制代码
例4:倒计时定时跳转3 l, h" E; M9 l3 v2 w
  1. <html>
    ' p& w% G0 |+ R
  2. <head>
    7 ~; E+ G% U/ \" G8 W
  3.   <base href="<%=basePath%>">' ~  f1 \/ K: o  Q1 f% I% }, Z4 k
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    1 r; I. Y2 h' [2 t# r
  5.   <span id="tiao">3</span>7 S+ {: e" h7 c. W/ X+ M
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……; w  k; M$ r. u+ Q
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>( E; R5 W1 Y6 _4 z% _! A
  8.   <!--脚本开始-->
    ! }& e  @. ~# z' M7 e# M+ @
  9.   <script language="javascript" type="">+ w7 J: V& Y1 B! @& n
  10. function countDown(secs){, e* n. n3 M+ M8 q
  11. tiao.innerText=secs;- [) E: c5 t4 K7 Z4 o! V+ v5 i* m
  12. if(--secs>0)3 J. y: @, F# H# w2 u4 h! E
  13.   setTimeout("countDown("+secs+")",1000);; [0 Q$ d0 T* D; y! ?# e
  14. }
    ) H1 b6 g! y" q# {3 {$ B
  15. countDown(3);
    # R& d' Z6 k5 q+ k$ [- n9 l/ F
  16. </script>
    6 V4 \8 Y: u( B) z/ |" s4 Q/ S! a
  17.   <!--脚本结束-->2 v0 ^. h- Q- j, i
  18. </head>
复制代码
例6:7 B- F9 v0 {4 ~5 H5 W
  1. <head>
    - Z  t$ K$ k% f) y
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    ! I! I7 X: ^" q! h# x
  3. </head>
复制代码
例7:
% f* t4 c5 m3 F1 C  {
  1. <script language="javascript" type="text/javascript">
    # W3 W. _5 a& G. }# y* O
  2. setTimeout("window.location.href='b.html'", 2000);
    9 g, l- F3 w4 E8 Y$ D% Z) ^
  3. //下面两个都可以用
    4 K# i4 J. O; z* N4 U0 V/ d0 ]1 h
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    ( w& K  v- a, W5 t. v0 d
  5. //setTimeout("window.location='b.html'", 2000);: A( T# }4 L/ @  p/ P6 D
  6. </script>
复制代码
例8:
/ q' B% B; K& N3 t( G( E0 v
  1. <span id="totalSecond">2</span>) t* t* c  w1 V  Z/ Z8 I
  2. <script language="javascript" type="text/javascript">! w. e9 D( `7 h" C
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;" [, s9 l( \( n$ v( s  _
  4. if(isNaN(second)){' p+ b0 ~, h: A; a% g3 H
  5.   //……不是数字的处理方法
    * W5 W" |- Q3 @
  6. }else{* A8 u) o3 V  w: v' g; d
  7.   setInterval(function(){
    * _- o1 q5 _0 t5 k) l( @# O
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;) D% L" K' O( e
  9.    if (second <= 0) {
    & ~$ r" F, T8 S
  10.     window.location = 'b.html';. q8 Z, H3 a' G0 J2 w, w
  11.    }- c1 p# D  C# k$ C7 M
  12.   }, 1000);  q5 K/ s+ }5 x8 z: X, `
  13. }
    8 x0 v2 D( Z! w# q7 G9 H
  14. </script>
复制代码

7 h0 P8 J  n9 c, p: Q# `/ e% b
8 t$ ?' B- F5 ^7 o
' {, U+ Y; S5 Q/ b. x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 12:44 , Processed in 0.055421 second(s), 19 queries .

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