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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1,只执行一次的定时器 : r) B% Y% P" ^8 ?$ z
  1. <script>
    4 d% [2 a" @& v$ b0 h
  2. //定时器 异步运行
      W3 o! X+ @) d3 m
  3. function hello(){ ; A2 e/ a+ h- P+ c
  4. alert("hello");
    - F0 ]$ t# g- p8 I! ~$ `9 Y1 p
  5. } $ m, ~% M1 B' F3 O; b
  6. //使用方法名字执行方法 1 d, b' K; |. e& D/ d( q
  7. var t1 = window.setTimeout(hello,1000);
    # R8 l7 e# F/ B3 m4 K) }
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 ( z$ ^( M; C  U* [0 Z
  9. window.clearTimeout(t1);//去掉定时器
    ! O& z( K; H% d
  10. </script>
复制代码
2,重复执行的定时器 ; C  H2 N2 k. y! o& `  N: w7 e; v
  1. <script> + C" D+ e' x- W6 m( q4 w
  2. function hello(){ ! `9 ^! g+ X% m' n' b+ g& N
  3. alert("hello");
    8 ^3 T$ M! K. v
  4. } 1 W9 g5 u3 `! ?8 v9 k5 V
  5. //重复执行某个方法 * s5 I: a' L. A, I4 D/ ]) B
  6. var t1 = window.setInterval(hello,1000); ! v& b; M5 O+ C- a# P
  7. var t2 = window.setInterval("hello()",3000);
    ! Z' i: i1 N9 W0 m8 u$ U" V7 H$ B( x
  8. //去掉定时器的方法
    8 i7 t, V: Y' z- e$ b) }+ m
  9. window.clearInterval(t1);
    ; U4 Y" f# r" s2 \" Y7 c5 _8 Q
  10. </script>
复制代码
备注: % o3 t; c0 d/ |, _1 J! z% D

+ h6 y% V6 U: m0 M1 n如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: ) ]. t9 \: P. B) U% \1 K+ G% ~& r
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。& s: X" s( W9 n+ Q3 J

/ d3 r. G7 T: S8 ]

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

1.倒计定时器:timename=setTimeout("function();",delaytime);7 e) C; v) N6 J5 S* a9 g& {
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
# V/ I+ o3 {1 O“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。! u2 c9 ^8 \) f: s1 }
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。, ~! L  `5 P7 e4 a) g6 ^3 }% ?5 k
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,1 [" u& Q2 E2 _
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
: O4 I& A$ w1 b9 a6 t比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。, ~! y2 c5 X* N
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
1 L7 X/ P  R- s8 dsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象+ g0 B. w7 ~; s: e& W( ~4 d# l4 W
clearInterval(对象) 清除已设置的setInterval对象

略举两例。2 K- K  {. }% g! H+ `3 u
例1.表单触发或加载时,逐字输出字符串

! n$ b# X. ?& m8 ]
  1. <html>
    - x/ X, ~) k. W+ @  {/ J1 a
  2. <head>/ x) w2 }6 N: o3 x1 F4 Z
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    . M/ y$ i! V! ?9 Q
  4. <title>无标题文档</title>
    - i& B) h5 ^/ b1 ]' D: S
  5. <script language="JavaScript" type="text/javascript">
    % p: X6 F& K! ~) H5 H6 w0 J
  6. var str = "这个是测试用的范例文字";& _6 X9 ]: O) O  h$ I
  7. var seq = 0;
    " V& R* H/ @8 z  Z* B0 k
  8. var second=1000; //间隔时间1秒钟1 }& B7 W5 `" h2 Q6 W6 V
  9. function scroll() {% W$ W& R' P  A
  10. msg = str.substring(0, seq+1);
    ( u3 a: d8 Z/ _3 O8 G" I3 J
  11. document.getElementByIdx_x_x('word').innerHTML = msg;1 k: C, w6 y- c7 s
  12. seq++;
    ) ?8 X8 M0 y- f1 D4 f
  13. if (seq >= str.length) seq = 0;: @$ }: C6 @; |" G+ E( o4 [
  14. }9 L* X! B. F7 k9 ?% P
  15. </script>
    : r  F+ a; ~1 X. r" K
  16. </head>9 s3 z; V: ~% f
  17. <body onload="setInterval('scroll()',second)">
    ' L0 @! m& q! ~- u! ?
  18. <div id="word"></div><br/><br/>
    ( |6 u& R! F+ ?; {, h! a6 [
  19. </body>( ]/ G) W2 C( K$ ^* e  B# J% s
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。# M7 l+ D3 r+ y" r
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    4 `9 W! |* O# j1 @3 \
  2. <html xmlns="http://www.w3.org/1999/xhtml">7 o( E* [: J0 s' Z4 a- c
  3. <head>' y* c2 r6 H" b- Z' y: \, R
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />* y3 I( b6 n/ v# p5 M1 W6 ]6 j" b
  5. <title>无标题文档</title>; Z0 Q+ I7 ~* B5 W( M
  6. <script language="JavaScript" type="text/javascript">+ U  l, ^0 V; ^+ v, q  F/ Z; @
  7. var second=5000; //间隔时间5秒钟' c0 o, }( G3 ]7 d: U9 O, }
  8. var c=0;
    1 K1 C( L6 A$ H; F$ Z- Y
  9. function scroll() {
    # k$ l- c: m7 k- X
  10. c++;# i1 s& a7 P% d! m2 z# R
  11. if ("b" == document.activeElement.id) {# f. C& ?* \# h- D7 R
  12. var str="定时检查第<b> "+c+" </b>次<br/>";1 R0 W7 m6 i, T
  13. if(document.getElementByIdx_x_x('b').value!=""){
    5 h' l: {& I1 {: ?" S
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";  c1 J5 n. ^, K& k& M1 l
  15. }& d7 ]: Y, P) d5 D1 {& N- s1 S6 x0 X
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    9 ~1 ~$ ^4 R, s
  17. }  }) d) b. L5 ^# W
  18. }. A8 {, g9 }& O1 M; ]3 A3 o! D3 K; _
  19. </script>9 T4 d% T. C# L9 w  _5 r
  20. </head>( C: o0 v8 S8 p" c! m' {
  21. <body>
    7 s3 M* g7 f4 o* Q. K) E/ K
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>& Z) o7 r' x0 n
  23. <div id="word"></div><br/><br/>
    2 N2 E  `& H3 j# `4 E
  24. </body>% }: W+ {* |, ]6 B* r7 y
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
6 T+ E$ `5 x4 G4 ]6 ^" K
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    7 I0 |  o, x- b$ ~$ E2 |
  2. <head>  B( T# k) R& X& `$ z" _
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ; d$ [' q' c7 E
  4. <script language="javascript">
    ( l% Y9 l/ K# p6 I3 t
  5. function count() {
    5 e' k6 S+ u( Z: y* E! g8 y
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    : [; f! O4 Z# w8 ]
  7. setTimeout("alert('十秒钟到!')",10000)! S7 J* z$ y/ G' L
  8. }  y/ M' e) S7 y4 t9 b& p
  9. </script>
    / \8 d* a6 R# U8 d" v1 V. X* A
  10. <body>3 ], |7 {1 @4 ?1 ^
  11. <div id="m"></div>
    2 ]* u, V6 r9 m) ^% Z5 ]
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    * {7 \' t3 b' o8 ]% g4 P( J
  13. </body>
    / U  o" U2 Y9 S* q/ |% m# s7 ], @
  14. </html>
复制代码
例4:倒计时定时跳转
( p* n. Z1 B* y0 P- @! [: o* S. O' N" d
  1. <html>, h; p$ }- X' a# u1 l
  2. <head>
    & M. E( Y1 b; I4 a
  3.   <base href="<%=basePath%>">2 T5 s. e+ v0 x  i4 Q7 E. S4 F3 l
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    1 i& M( [) }4 [5 U, h- n% D
  5.   <span id="tiao">3</span>
    & Q  b: T0 _7 V& d5 O9 J# J/ P% r/ M
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……' U/ j! \3 i! p7 a. e" m
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>% d! v2 Q8 L" e, k4 k
  8.   <!--脚本开始-->. a  o& |2 x2 C7 q
  9.   <script language="javascript" type="">
    $ F! O( }2 }+ w; t, f* R" u! g/ S/ u
  10. function countDown(secs){9 c/ ]8 _; l1 i- [* s9 b/ _
  11. tiao.innerText=secs;( l5 f; H6 c" C$ h5 m4 D
  12. if(--secs>0)' B6 `8 v4 r) O' P' K
  13.   setTimeout("countDown("+secs+")",1000);& I7 M: y( `7 i& K# t9 f, n" O- u
  14. }
    , Z, S$ m( D! D. M
  15. countDown(3);
    5 N* P' N4 m. V
  16. </script>
    4 Q+ N9 f) x" N( m! e9 r5 @
  17.   <!--脚本结束-->: z8 t6 @- ^5 b
  18. </head>
复制代码
例6:
, H$ Y  e; Q: ^" m
  1. <head> ( |# ?+ T& q( x* y" y6 c* R
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> 7 P4 y- x  _" E+ P+ x
  3. </head>
复制代码
例7:7 [& E( }3 C8 `) ]
  1. <script language="javascript" type="text/javascript">/ v5 p. c- k$ t& O
  2. setTimeout("window.location.href='b.html'", 2000);: `% _5 h5 _! u; w; {1 k* y6 s* K
  3. //下面两个都可以用0 |$ P1 N. p, y
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    + a6 v- _1 D; B, S( L5 {/ ?
  5. //setTimeout("window.location='b.html'", 2000);
    / U7 [* D. N, A+ Q' f9 j, x
  6. </script>
复制代码
例8:
1 _/ @/ m' U) B3 X0 d: {
  1. <span id="totalSecond">2</span>
    7 h# Y1 `9 I9 @! y
  2. <script language="javascript" type="text/javascript">: K2 z- [7 G" x* T
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    2 ~9 b$ }1 E! }0 l- S& E9 V+ `8 r* ~
  4. if(isNaN(second)){; P9 g, Z0 e/ d3 f/ O) L; k' k; d
  5.   //……不是数字的处理方法
    9 n- D) w! b; A7 q3 \: d
  6. }else{
    5 q  n0 [3 G" s/ i; j% H) E
  7.   setInterval(function(){$ p6 y0 K9 |$ a" H, B
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;) _) J! ~! j  b# Y  Y; R
  9.    if (second <= 0) {6 X8 s) T- R( x
  10.     window.location = 'b.html';& M/ o; S- [8 V! H
  11.    }% ?, [# _4 x& y
  12.   }, 1000);: U  ]' P* V! f4 y3 ^, |
  13. } $ W: r; f' }7 p$ ^1 v
  14. </script>
复制代码

2 e; f+ V% K% \) I. x5 N0 h6 J1 m$ @+ Q+ S9 o" v* S6 e
6 A! G5 _' C, O2 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 13:12 , Processed in 0.203198 second(s), 20 queries .

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