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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
, s: ]- L1 g; a( k: ?
  1. <script>
    - e& A( a( }4 k' {# L" K/ j# n
  2. //定时器 异步运行 0 t& D" ]$ z; C/ e% L/ D) [
  3. function hello(){
    / u" j! t* j0 X
  4. alert("hello"); * a$ s1 b& G: y7 T) k. e' e
  5. } : v& i* o" ]5 O3 \; _
  6. //使用方法名字执行方法
    0 g3 z9 x+ r' L' r
  7. var t1 = window.setTimeout(hello,1000);
    % P$ q+ j. B, g0 u% c
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    ' p0 C  ?( Z2 V
  9. window.clearTimeout(t1);//去掉定时器
      @; s3 v! {% G/ H  y
  10. </script>
复制代码
2,重复执行的定时器 7 Q7 G5 t7 m3 w' [/ G# R' z
  1. <script> " g  n4 z9 F4 k! k* u  g3 @, N
  2. function hello(){
    , p3 u6 }1 m- v" z
  3. alert("hello");
    6 L. F/ k4 W4 R: _$ P! e
  4. } - I: F+ B: }$ r" s
  5. //重复执行某个方法
    / A6 `2 A5 a' l: n$ @
  6. var t1 = window.setInterval(hello,1000);
    2 n& o8 O4 R4 F5 F/ C
  7. var t2 = window.setInterval("hello()",3000);
    - x3 z$ v' l) R  w( H
  8. //去掉定时器的方法 8 E1 O/ V$ h8 f+ R- Y3 L
  9. window.clearInterval(t1); . u% I5 [* F" F
  10. </script>
复制代码
备注: % S. d5 X, `0 U0 F

% c" `& c/ M5 N' U) |8 a8 U如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
' ^. {# }2 F9 \& c( ]可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。/ k( M6 t' {) Z' u6 |+ r6 j

: h' U4 e, `# X: ^( z

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

1.倒计定时器:timename=setTimeout("function();",delaytime);$ d2 i4 [  r( w' E
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成$ P" e" G- @8 v' r
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
: O; R( \1 g, Q0 U  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
0 J, W9 J8 x$ @比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
8 {9 }0 u: `+ r; X则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
$ x8 A0 F( c, ?' X' j& {) g比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。! S& |# A+ M, R- X! }2 |
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.% G3 ?: z! S! p
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象! B) ?7 Y9 z% v% t/ L& @" ?
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
* w9 u+ j3 B) I$ ]6 g1 ?7 w" S6 z例1.表单触发或加载时,逐字输出字符串

0 S8 M; v+ _% S* X) o7 O) k: W
  1. <html>
    6 x8 a+ h! w0 @
  2. <head>
    $ z' j3 s* B7 k0 ]
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    $ I, y+ l/ e/ {/ m, z  z% H
  4. <title>无标题文档</title>0 f' t7 t+ X& B- e% S2 x8 h/ P$ ?
  5. <script language="JavaScript" type="text/javascript">; G" u" V. _0 X) p5 b
  6. var str = "这个是测试用的范例文字";
    9 Z/ D0 a! `6 W) m) |
  7. var seq = 0;
    - B; L& y4 G& q
  8. var second=1000; //间隔时间1秒钟, G+ ^* t; i; g9 ~3 x
  9. function scroll() {
    $ P. D8 A4 {. i; h- C- J. C
  10. msg = str.substring(0, seq+1);
    / ~; c" ]$ c* N0 v' ^
  11. document.getElementByIdx_x_x('word').innerHTML = msg;+ Z/ M. D- J/ Q- K* H3 o# s7 I
  12. seq++;
    , m) {5 E) j+ O# t
  13. if (seq >= str.length) seq = 0;
    8 A; `4 Y* R$ a
  14. }, |2 b1 N6 U1 C! V
  15. </script>; w& C3 e, d3 R( H) f3 }
  16. </head>
    % Q1 d( }" T, F0 ?# [* Q
  17. <body onload="setInterval('scroll()',second)">
    3 t" Y$ K" W$ r  j( n6 O+ |0 f
  18. <div id="word"></div><br/><br/>
    " d5 g( t* s9 I2 G6 `
  19. </body>' d1 U) a( f4 t9 R
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。: }) }  _  G3 V7 S8 O+ U
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">9 k; c, F, d* {) ?" b3 D2 z# U
  2. <html xmlns="http://www.w3.org/1999/xhtml">* D0 o9 k1 ^" K7 m( ?
  3. <head>
    9 M$ I, L' D# }9 U/ S$ N
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />6 `7 @* N: G2 V$ Z8 z
  5. <title>无标题文档</title>
    ; J4 r* J+ Q- {% S& \8 y
  6. <script language="JavaScript" type="text/javascript">( R; y1 e+ K7 m4 Y
  7. var second=5000; //间隔时间5秒钟
    2 c5 p) `# e& [$ {# ?% I* v0 L
  8. var c=0;
    / Z. g5 y9 k4 T7 F* e5 `% d7 E
  9. function scroll() {) u4 |- [- U; F1 A* K( ^
  10. c++;
    ( \* Y7 A1 ?: _; C
  11. if ("b" == document.activeElement.id) {7 u- [  f8 h1 Q7 P% w3 I
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    $ {7 l0 H: |% ?. N5 N! a" I. ?
  13. if(document.getElementByIdx_x_x('b').value!=""){
    , k- o+ a& t: e3 I  j& s& a
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    3 E- |- m3 x+ s" V) R
  15. }
    , {  F) y# P% M; H/ E
  16. document.getElementByIdx_x_x('word').innerHTML = str;9 ]6 a1 _# P$ n0 Z* _
  17. }- Z. \: q7 K& c
  18. }5 F: a9 _7 V' P) P& [
  19. </script>/ y4 L# R' |+ v
  20. </head>
    8 j5 b# g5 z/ s8 ~. ^% i# m
  21. <body>- ~, q; ]' K6 [+ v
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>! `  D; Z9 Y- u! N
  23. <div id="word"></div><br/><br/>
    1 ]! L% N- L; g' L5 ^
  24. </body>
    ; r* ~* ?$ z& O; }+ D6 k7 b
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
9 x9 Z. F( S* Y6 T- \8 y9 r& |
  1. <html xmlns="http://www.w3.org/1999/xhtml">0 p0 D4 _# [2 ?1 S" a
  2. <head>8 O9 F& O) C; _* Z
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />& Q0 P. p+ U  U
  4. <script language="javascript">$ A! n3 {: N! W+ v5 t
  5. function count() {2 O# [/ ~( h# y, b7 Q
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";$ k( u. p, j7 w$ _& X# P
  7. setTimeout("alert('十秒钟到!')",10000): z' F. A: z" f8 ?4 p% \& F
  8. }3 T8 F. H$ ^$ y. i" E4 D
  9. </script>
    ! f( O) ]- q  B( ~: G# `
  10. <body>( l3 f  R! q2 J+ g6 _
  11. <div id="m"></div>
    8 e" t2 T( T4 ^3 M, |, q  v* m
  12. <input TYPE="button" value=" 计时开始" onclick="count()">" |) E3 I  E. W, u) H* N; i
  13. </body>8 a3 X% g+ D0 l4 ?. K- E
  14. </html>
复制代码
例4:倒计时定时跳转' P% A: C/ G, t* ^( L. x
  1. <html>( q2 k/ f" u! }& P4 K# B+ y* y
  2. <head>7 b" Y3 K& c" W" A3 Z
  3.   <base href="<%=basePath%>">/ x/ @8 ]' h; w1 a6 W
  4.   <title>My JSP 'ds04.jsp' starting page</title>: j: _% R; `, V9 r$ L0 E
  5.   <span id="tiao">3</span>5 \0 c6 k  L. L0 k* Z2 L0 `
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……1 V9 \3 E: H! O; q& j/ ?+ `' x
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    + _6 n8 o& w0 r9 ]+ j* A: c
  8.   <!--脚本开始-->1 d# u+ w; j/ N+ N
  9.   <script language="javascript" type="">
    $ N# v: n4 C' ]* a
  10. function countDown(secs){- |; c( {' U/ i8 e. g+ p4 ~& u$ A
  11. tiao.innerText=secs;
    * G  A( [$ ^4 }1 @4 i& R
  12. if(--secs>0)
    : f9 C2 R) \+ r
  13.   setTimeout("countDown("+secs+")",1000);
    5 s5 K5 o# Q1 C
  14. }
    ! V  i* o8 W1 I0 D/ L
  15. countDown(3);7 v. S) k( j' n* z! M4 h
  16. </script>' o3 `6 G; u! |0 a
  17.   <!--脚本结束-->1 }+ m" A# j9 r  D* k
  18. </head>
复制代码
例6:
& }9 |) v; Z; h/ T0 f
  1. <head>
    ' v9 M! m2 J0 F1 C# v" Z
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    ' x' G2 l) p/ k7 G4 {8 q
  3. </head>
复制代码
例7:% H) S: ?. N% |, ]3 u) {
  1. <script language="javascript" type="text/javascript">
    + b0 O6 Y3 |- E( E7 q
  2. setTimeout("window.location.href='b.html'", 2000);$ v/ L3 S# D* c+ H
  3. //下面两个都可以用
    7 {9 W9 T2 Y9 i! K% E% D) g
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    # x- F5 z3 T4 g" O& O
  5. //setTimeout("window.location='b.html'", 2000);1 Y2 ^. W0 h  V( E3 j3 c" g6 u
  6. </script>
复制代码
例8:' u$ {) [8 i6 @; Y
  1. <span id="totalSecond">2</span>3 N0 [( Q9 }! n9 C9 ^7 c
  2. <script language="javascript" type="text/javascript">
    $ d# e' T( V6 g4 A
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;4 D: _5 w" f. W" M6 T3 ~0 ]
  4. if(isNaN(second)){
    . T) X# K! u* A, b1 Y4 {0 ?1 @9 K
  5.   //……不是数字的处理方法; S: u  K1 `+ c' |8 a# y' ]! L) l
  6. }else{
    + B! r. ^" `/ i+ }  ^; ^% z3 Q7 M
  7.   setInterval(function(){
    ' T# ~# N) U  a$ g, z. S
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;* x, f! G3 C4 [
  9.    if (second <= 0) {% p9 k: y- F+ [: b* h3 T( B4 C
  10.     window.location = 'b.html';
    * H1 M) d. c- R0 E" w$ J& B, |: V
  11.    }
    7 B9 U$ u4 ?& s7 K% h# I
  12.   }, 1000);3 m! I$ e2 N% W/ b3 \
  13. }
    . C: q3 H+ s9 ^' G$ E7 R/ f
  14. </script>
复制代码

0 i- |* L% D8 Y" y" T& V  U0 G  Z7 _/ y. j; \
' y4 J8 P0 |) T) ^3 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 02:55 , Processed in 0.103061 second(s), 20 queries .

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