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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器
/ p* ^) `4 C: g& V
  1. <script>
    8 B' b, j0 U: ]0 J$ L) r+ G. O- \
  2. //定时器 异步运行 7 K* w( U/ G2 m: O* P7 c
  3. function hello(){ 8 q' X8 @0 _# j; C5 c! I8 W7 N
  4. alert("hello");
    7 u2 P( o, H5 y
  5. }
    9 h' L+ s7 O: @( M. i' u4 v4 g0 ^
  6. //使用方法名字执行方法 ! J( T3 x0 W% q: F# z9 y
  7. var t1 = window.setTimeout(hello,1000);
    9 X3 t2 S% e' M7 ]- V4 ]
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    8 D" c3 k6 \) l: x
  9. window.clearTimeout(t1);//去掉定时器 : V9 r: g# x" }" Z: _  q
  10. </script>
复制代码
2,重复执行的定时器 1 h1 |( l# Z3 C6 B% S! p2 _
  1. <script>
    + T1 y) W$ _4 }8 D, c/ c5 N
  2. function hello(){
    4 m2 U. {- L( f% y) b0 Q! K2 b1 [
  3. alert("hello"); + u5 d0 M5 X/ D: m0 i6 P; t: P4 e
  4. }
    & t; S, B. H/ C) v) ^' ]
  5. //重复执行某个方法 ( n  e" f; N0 Y; V# n& Q) v
  6. var t1 = window.setInterval(hello,1000);
    " }6 P1 g1 `) ?2 W
  7. var t2 = window.setInterval("hello()",3000);
    ) X3 [! W) \0 J( f: b
  8. //去掉定时器的方法 7 |, x, n2 v8 \
  9. window.clearInterval(t1);
      e( `. z2 d9 x3 R/ R
  10. </script>
复制代码
备注:
8 F6 t" L! X5 Y8 t4 T5 B
3 G* u9 f! q1 T( p+ z) e" J如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 9 [) e2 [/ y5 z% m3 h& T1 U9 j
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
, f/ V3 ?0 e* V% \$ S+ C' {. w9 S$ k% q% \4 I- ^: h

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

1.倒计定时器:timename=setTimeout("function();",delaytime);- t/ k  ~3 ?- o8 ~& v
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成) z" n" W8 ]0 |1 t* X- @
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
; u; ^2 G7 L$ j% l4 A7 o% T  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。8 A9 O7 @1 W- h' `, Q
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,- I6 }4 i, N+ T% y' G
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
  Q4 |* z7 m% A$ r! X" N5 Z比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。) D( s0 l; m( h2 E" m. g
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
+ @& X% X; J5 d, U3 w7 DsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象! D, C- `' @/ S1 e0 v
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
5 p/ A; Y6 e8 s3 J例1.表单触发或加载时,逐字输出字符串


. D( h7 c$ _% a& b" u" s$ N
  1. <html>2 M8 f% J6 K" a( m3 r0 g/ s
  2. <head># \' k7 ~8 q) W8 x
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />5 r- p) f, z0 Z, u
  4. <title>无标题文档</title>6 s4 ?2 Z1 ?; S' Q- o' F: S
  5. <script language="JavaScript" type="text/javascript">
    , D! j  O/ T; ^: }+ u5 p
  6. var str = "这个是测试用的范例文字";2 |& }5 k3 P0 T) f
  7. var seq = 0;
    ; a3 Z  C0 [4 ~3 _$ h2 n
  8. var second=1000; //间隔时间1秒钟" Y9 ^3 w) y, k& N4 f
  9. function scroll() {
    9 a& f: b. q8 ~' ^# a1 N. r
  10. msg = str.substring(0, seq+1);
      G+ g' ^( l8 W7 r+ o6 h+ Y
  11. document.getElementByIdx_x_x('word').innerHTML = msg;, c0 I% H6 n0 a1 y5 l
  12. seq++;
    / b3 `: D: f. W: V! V( g
  13. if (seq >= str.length) seq = 0;4 Q1 S( ^9 Q4 W1 Z
  14. }
    ( B& A9 s7 N3 b% Q
  15. </script>+ _8 T9 ]% s" Q6 Z( i
  16. </head>
    . v  M! C: G) o: t6 {6 H6 ?
  17. <body onload="setInterval('scroll()',second)">
    % {) v4 e: h" ]. d1 g+ e# H
  18. <div id="word"></div><br/><br/>' Q( J+ _$ k7 `% h9 x2 C  }+ `9 w
  19. </body>
    0 K/ [* C! i* W7 v' U1 ~4 D" G  z
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
8 b% y6 h. J( f7 [0 ^( V( ^8 D+ C; s
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    + [. L. X" C, a! I) F' y
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    , H1 k6 u+ o4 A, r8 I, W. j$ O
  3. <head>- f: [' C, n* b/ C% x6 o; x
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    : X1 ]" _6 o' C/ F2 c% D
  5. <title>无标题文档</title>; G. e! I/ y% Q! p5 x; g& x
  6. <script language="JavaScript" type="text/javascript">8 ?9 ~- S& E" C8 e+ Z4 x
  7. var second=5000; //间隔时间5秒钟
    * r7 s' F7 H% L
  8. var c=0;
    " _- Y6 H, Y) C) _
  9. function scroll() {
      N6 x+ n, n0 j6 b
  10. c++;
    ! F0 _' N6 M8 K. a) @) Q
  11. if ("b" == document.activeElement.id) {6 _, C: V% @+ O9 W  \' H, B% [
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    3 G" p5 h- g& j9 ^9 y# d9 @
  13. if(document.getElementByIdx_x_x('b').value!=""){7 h7 R' e4 E' U: P8 l+ t
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";8 s  }, g' L- r2 q7 `) @6 o* ^0 R. x
  15. }# L) ^+ X. O) w% ?7 ~
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    ; j' R, Q- b4 M8 H
  17. }, Z- ~- G4 V" W( ]7 _
  18. }
    $ [- u4 k* _! y2 g
  19. </script>
    * X3 c4 c! x8 K0 ^; c
  20. </head>; O. W- T3 Z% l9 m
  21. <body>
    . G8 c; H/ J. u, i8 p" r8 H) M& L! N
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    - }% r8 p3 x9 B: h
  23. <div id="word"></div><br/><br/>
    3 Q* g/ s* m9 a4 T: ?
  24. </body>
    " C& ^! F' G/ y% ^
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。4 h. i  ?, O0 w, W* }
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    - A1 O' \( g2 k1 @/ f7 a) q
  2. <head>
    , Q- X- R  \' ^. ~3 X, c6 t
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /># P, F+ e: r% p1 I
  4. <script language="javascript">
    ; Y" ?! q! _5 D2 D% F- S% Z
  5. function count() {
    0 _; w# {; m4 W" o
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    * ?2 Q% [& a  E7 j$ v
  7. setTimeout("alert('十秒钟到!')",10000)* q" r( n, u# _
  8. }+ ^1 {6 [- O/ g# v4 h' C
  9. </script>* U* l/ c$ }6 g$ _
  10. <body>& X- I% q* v0 P+ w% C; G7 w
  11. <div id="m"></div>3 z) m$ r6 z& {& f/ H4 x
  12. <input TYPE="button" value=" 计时开始" onclick="count()">/ X8 A  }) k& d. }4 `9 \
  13. </body>
    " ]# ]& Q7 K% S3 W, }+ d) T/ @
  14. </html>
复制代码
例4:倒计时定时跳转
3 b  A$ g5 R4 U$ S; z7 {
  1. <html>7 C0 U, F8 ?& X  F9 Z$ w* j
  2. <head>
    1 O& |* G( y& }2 L. H
  3.   <base href="<%=basePath%>">
    1 E/ U" p$ ?. |: h+ s7 c
  4.   <title>My JSP 'ds04.jsp' starting page</title>0 Y# `. [7 s8 d. i% \+ G
  5.   <span id="tiao">3</span>0 \9 Z# t! K# u2 }  p' o
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    6 g7 t: \/ b" D) t, _- }
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>( |. h: V/ W! {+ [9 G
  8.   <!--脚本开始-->
    & ?. P. [( {- L" l- ^
  9.   <script language="javascript" type="">
    ! t, y& D0 A& R! c  X% `* h
  10. function countDown(secs){
    * C7 c5 \; l/ K9 X! {( P  L
  11. tiao.innerText=secs;
    ' Z) }2 B( r8 W% j/ N! \
  12. if(--secs>0)- l' h% q' c7 {7 o
  13.   setTimeout("countDown("+secs+")",1000);
    0 [# J7 V$ B" M5 B
  14. }) W/ F! R! v& Q. V0 \
  15. countDown(3);
      O- Q4 |# r5 ?) g
  16. </script>' a) t- y! \1 c/ A
  17.   <!--脚本结束-->) o+ y/ ], g: H# s" e
  18. </head>
复制代码
例6:/ C! i( M' z7 z; Y: K5 m
  1. <head> . R' L4 J; s! f: H( @( U6 @% r
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> ! V8 u# c: H5 D1 t, D# b
  3. </head>
复制代码
例7:
- }; P8 a# @1 ~9 X. C6 R8 C
  1. <script language="javascript" type="text/javascript">( s8 j) q! V6 C& F+ p
  2. setTimeout("window.location.href='b.html'", 2000);
      [- e: B) O( b+ V
  3. //下面两个都可以用& v6 d# P8 W$ h# W( y6 u5 y+ g* M
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    9 g3 ?! m0 h& _" v
  5. //setTimeout("window.location='b.html'", 2000);
    - n" `: W) i. }* p. I
  6. </script>
复制代码
例8:
/ D2 o3 _. q- ^. z
  1. <span id="totalSecond">2</span>
    ' I  O& P$ N0 a1 T- N& @
  2. <script language="javascript" type="text/javascript">
    9 \* i3 F8 X; p( t& ~& t
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    * C3 w1 z6 ]  B" K7 w9 y; y
  4. if(isNaN(second)){
    ' {/ [' a1 `: s* o: i
  5.   //……不是数字的处理方法7 ?" Z. ^$ j1 `0 F: M% M! P; X
  6. }else{
    : b- \. _  M5 c) w+ i' J! N. n
  7.   setInterval(function(){# w% ~5 _( r, Q7 T2 x7 e
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;- t1 H( m& A- w2 a, a
  9.    if (second <= 0) {) T7 u& N8 n4 F7 k" _5 A- g
  10.     window.location = 'b.html';# A9 B0 \. |( ?7 [
  11.    }( s' B! c; f0 O+ Y6 a5 F3 S% r
  12.   }, 1000);0 ~6 |$ g  ~6 K  {7 R. I( Q' B
  13. } ! J5 S! O  I, o; [! s
  14. </script>
复制代码
; M0 P! {+ b. T/ {
* x0 p9 I" ?5 q  F+ F9 q1 h( s0 y" q
) ?0 M6 O' J3 |/ y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 12:45 , Processed in 0.056427 second(s), 20 queries .

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