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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 * l2 }: Q; d2 p- ~( _% W
  1. <script>
    & d1 C; U& T& P% T$ ?+ \( O8 W
  2. //定时器 异步运行 : W' K# v' v: r5 \
  3. function hello(){ 0 b% n. B4 b! e7 k* B& m6 F8 m+ o: x
  4. alert("hello"); 2 b0 |' N$ D! K. `' f0 g8 i' s
  5. } * s9 j+ X, t  e3 z' x+ `; D
  6. //使用方法名字执行方法
    ! i$ k0 n, y6 R! I1 M! X
  7. var t1 = window.setTimeout(hello,1000); . N. t: G- L2 l3 J* X
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 # r; Q( v1 O* S( b. M, Z+ X1 }$ O
  9. window.clearTimeout(t1);//去掉定时器
    + ]2 H; v& O) x( `
  10. </script>
复制代码
2,重复执行的定时器
4 o: s8 }- ^% [& n6 [
  1. <script> 5 {( c; Z- w# _0 W, @* W, s
  2. function hello(){ - K* H2 s( T* H2 n6 r" H5 g- ^
  3. alert("hello");
    8 {4 p8 v& \; \) x7 u0 F0 f1 u
  4. } + p( B, E3 \% _& s* L
  5. //重复执行某个方法
    0 e! q- |' f: N9 t6 {0 w$ F
  6. var t1 = window.setInterval(hello,1000); 3 ~. Q9 r% _) G! |9 g! f
  7. var t2 = window.setInterval("hello()",3000);
    " ]3 i% u, v" W  ]8 S6 f4 ?8 z/ G1 P
  8. //去掉定时器的方法 " j$ u2 n' E) `- F$ d+ Y6 G
  9. window.clearInterval(t1);
    % C* q( k% U% N- V' E9 P
  10. </script>
复制代码
备注: + _: m+ \% b- d; F1 \7 r  z

7 @( V  B( T& _# ]. i2 ~如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
" `3 ^9 o) P: ~* U6 e  A可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
  g1 j' r2 D+ I: y* ?/ W; d! M2 f

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
& s7 r" F* f# b  ]! h% E  H" C2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成) S- j0 F# y, F  u2 O3 n: @
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
6 a+ Z/ V; }7 _3 [, w  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
( K( M- [$ Q0 T  v7 M, B( e比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
% G9 i/ N) t3 o; [# ]4 `% |则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。$ h" J5 p. z# n9 d( w) V6 O& a) K. L2 L
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。5 a# u' C8 K  u. R1 ]& X, b& Y5 `% p
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式./ u$ [+ i5 @$ E5 u  p
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象. a' }& Y: j2 {9 ?2 M! J) W* u* q
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
5 J4 w( V4 M4 q+ U% N: W  r例1.表单触发或加载时,逐字输出字符串

, b8 |: @  R+ Y( W
  1. <html>
    3 }  y4 Z, j. C) b8 |
  2. <head>
    8 p) h0 F/ r7 a/ ^
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    - s6 d- F8 d  p5 l# h* d
  4. <title>无标题文档</title>9 b) A4 e, @7 Z( v2 I7 o
  5. <script language="JavaScript" type="text/javascript">+ w0 L/ N# ^7 e3 @  r
  6. var str = "这个是测试用的范例文字";, [1 b2 m6 e2 K, x; S  m" R
  7. var seq = 0;
    7 w) }( g8 E) H9 F& `/ O. R- D
  8. var second=1000; //间隔时间1秒钟
    9 P: s) Y4 n; |6 Y) x; q
  9. function scroll() {" D8 x: j$ e6 Z' B9 @" H& k4 ~; \
  10. msg = str.substring(0, seq+1);
    , b6 k$ p- h0 J( p& R
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    ' Z5 f% a  b& b# _0 ^
  12. seq++;4 h! }9 q5 r/ Z& t  C4 ?, T
  13. if (seq >= str.length) seq = 0;; u8 |, {/ F" a) z" d
  14. }- x# y% L. F3 x: ]0 O6 X
  15. </script>* H+ ]) C' e" Y* T
  16. </head>% F8 K3 t' u. o0 ?8 N
  17. <body onload="setInterval('scroll()',second)">
    / U3 [1 Y9 J# |2 y& w9 W2 i
  18. <div id="word"></div><br/><br/>
    # q& T! x- C# S* D* b# ?
  19. </body>
    8 F8 N( P5 r& J
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
9 t# I# [2 |5 a  f6 y
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  h1 B3 ~# v' w: I$ h( G
  2. <html xmlns="http://www.w3.org/1999/xhtml">. _) V" O# R/ j
  3. <head>
    ! `5 m  r8 G8 }
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />4 g$ F3 V; F! X
  5. <title>无标题文档</title>0 {- m5 Y  r; S  s8 ~% p
  6. <script language="JavaScript" type="text/javascript">* Z4 |+ d' x- i' \
  7. var second=5000; //间隔时间5秒钟7 K. {! ]% r  y6 [1 _. m
  8. var c=0;
    7 x! l5 j, S# v+ @
  9. function scroll() {6 J$ ~8 {0 z( T- ~5 R
  10. c++;
    9 `6 c5 @+ m$ e, K, R
  11. if ("b" == document.activeElement.id) {% |1 O& _& F7 t
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
      u: [: H, C( i' c9 w4 ^$ z
  13. if(document.getElementByIdx_x_x('b').value!=""){
    # r$ Y5 c( {9 p6 b  G" o2 C8 r; z
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";% R. @5 d6 k' s- `+ d  Q( \
  15. }: ^$ b/ z2 @* |4 B3 R
  16. document.getElementByIdx_x_x('word').innerHTML = str;0 H# V* c# m8 I) Q) ^/ U
  17. }
    $ Y* H5 h8 ?6 |; `$ Y" Y
  18. }( w- k" \- l/ G, W0 P: h) ^( Q* a* ~
  19. </script>
    7 x0 H6 r& P9 h" `
  20. </head>
    4 @, [' H. t  ^2 j
  21. <body>
    9 g: A; c; @/ K
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    1 A1 i. h% ]/ C, J' u" x
  23. <div id="word"></div><br/><br/>
    % W* y2 r3 _* I6 m
  24. </body>
    2 d0 @( \) A, X9 }
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。- N! M/ x3 h; {8 w/ V
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    + s+ f3 A7 v4 p( o0 S
  2. <head>
    " t0 ]' N7 T, z  [3 D1 b" v2 J) u
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />, |( [* h2 u' R' N1 m% ^% ]
  4. <script language="javascript">6 z2 \4 e5 c9 Q% Z' k
  5. function count() {5 f* b" t+ r( [' k
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";7 _5 B' R' r! ?- l7 I2 K- S& M
  7. setTimeout("alert('十秒钟到!')",10000)% M' }' u1 E" A
  8. }
    * }6 G% d6 g# M
  9. </script>
    6 C9 j& \. ?4 J5 l
  10. <body>  x/ W5 A# X4 ~1 ~% A! G( Y
  11. <div id="m"></div>; d* b$ B( t* y$ |9 Z' ~
  12. <input TYPE="button" value=" 计时开始" onclick="count()">- G2 }# [- @! g8 N5 A, V% z
  13. </body>+ a# f& i9 S. _( [  S
  14. </html>
复制代码
例4:倒计时定时跳转4 ]% p! t; X* l. G( n* l, A
  1. <html>0 h4 B; ]0 j, x. [
  2. <head>
    + s& ]( s" k+ F, i' S
  3.   <base href="<%=basePath%>">0 E0 g2 [5 Z' T: B8 y0 K1 M
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    : L4 o( X) ~( w
  5.   <span id="tiao">3</span>
    / V4 G9 H& h& S1 b# M4 \. I7 U. h- G
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……9 A3 L8 O/ h) l; ]
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    & i" ~; S% F4 ~0 W
  8.   <!--脚本开始-->, a5 U/ f2 d- l4 R
  9.   <script language="javascript" type="">7 U& |% K) ?# x; R) ~, H: E. X
  10. function countDown(secs){
    # F% D( J, Q: t$ `3 [
  11. tiao.innerText=secs;( f% D- ]' t( V5 I- v5 v* T2 q/ P( Y8 J
  12. if(--secs>0)
      L' W9 @) n3 w# B& b9 ^
  13.   setTimeout("countDown("+secs+")",1000);, q4 r3 d' z6 k- n. k3 l* B
  14. }6 l8 Z- k8 G7 H& }/ z
  15. countDown(3);
    ; ]& T# `* c' ?+ T$ I* m
  16. </script>
    ( [# K& D, r3 g: g+ {" Y6 ~  I, p
  17.   <!--脚本结束-->
    ' D6 O0 u2 s% q" |' e. \
  18. </head>
复制代码
例6:
' G* A2 J# K' F3 C* c1 d8 |
  1. <head>
    ; t% o$ x2 ~8 K  c- P7 J
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> " S- c2 K/ f: M- y6 i
  3. </head>
复制代码
例7:. K( H5 ~( w  _+ X6 r
  1. <script language="javascript" type="text/javascript">0 F8 U6 C. V. r
  2. setTimeout("window.location.href='b.html'", 2000);
    : f' [2 B) w# _" a% t
  3. //下面两个都可以用
    9 t- T5 A9 }( H* u! m: Q
  4. //setTimeout("javascript:location.href='b.html'", 2000);) Y  B. f0 n  |3 C/ d9 a
  5. //setTimeout("window.location='b.html'", 2000);$ s- H1 ?' c1 `, m- i: ^# D% N- g
  6. </script>
复制代码
例8:# r8 ~1 l4 X( s1 m; f: ^6 d- u
  1. <span id="totalSecond">2</span>
    . r/ ?; }. w$ P; k5 w: a6 n
  2. <script language="javascript" type="text/javascript">
    0 B! U0 R0 |5 t$ P% B  W: L4 ]' [
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;9 \$ {7 u: a8 H/ D' L
  4. if(isNaN(second)){
    8 F, T$ ]' _/ _
  5.   //……不是数字的处理方法
    & X1 d0 u; t& r" n: s$ t9 I
  6. }else{
    ' G" v0 u2 _+ E
  7.   setInterval(function(){
    4 e+ P0 O9 \; ]4 Y* e
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    9 W. Y4 O# y/ q* d4 ?
  9.    if (second <= 0) {" c5 d  S: M( z& w  ?0 n. A
  10.     window.location = 'b.html';
    # K8 s2 \* U3 c; Y
  11.    }
    : [8 W. a% @% a/ C% V' }& U
  12.   }, 1000);
    + X* {" Q" L1 |
  13. }
    ; ?- d5 p, O- L
  14. </script>
复制代码

6 l0 n4 M* i8 m0 T$ R, ?
7 i( d8 |- X# {% V; J& g0 h% }! F% E- T$ j1 J5 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 14:35 , Processed in 0.132574 second(s), 19 queries .

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