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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ( z3 Q5 e+ i) m' ^% t) ]9 e
  1. <script>
    9 w  f5 M- u/ d0 K4 p6 a9 s7 Q
  2. //定时器 异步运行
    : V0 ?7 U5 w/ T
  3. function hello(){ + A, R- Y5 l! a. U2 g! B
  4. alert("hello"); - `5 C* C$ m0 I
  5. }
    5 ~/ x5 r: @2 v" x8 d+ ^) u# {
  6. //使用方法名字执行方法 1 V0 N% M$ Y; [; U
  7. var t1 = window.setTimeout(hello,1000);
    ( I& {9 }& w+ a7 h( B! X
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    + L" A. Z9 O% C* j* A
  9. window.clearTimeout(t1);//去掉定时器
    / p/ g* r* ~6 I- I, O
  10. </script>
复制代码
2,重复执行的定时器
, n2 _$ \  o- W6 ]! Z$ d
  1. <script> ' P- l* A* j: m! ~4 C7 _
  2. function hello(){
    7 k+ Q% y. e. G
  3. alert("hello");
    " [7 X8 B& K  N5 v  f$ F1 d
  4. }
    , R0 L  n/ v8 r7 u# ^7 m5 P" P
  5. //重复执行某个方法 $ I$ `0 g+ u: q. P3 \+ l
  6. var t1 = window.setInterval(hello,1000); * D0 Q6 V- g' l9 Y3 ]* O
  7. var t2 = window.setInterval("hello()",3000); / Q0 @8 G$ I: ?
  8. //去掉定时器的方法 9 X" n$ o  Q" |  d$ Q# N' T
  9. window.clearInterval(t1);
    1 c* X7 l) a5 F. o/ R" b) }
  10. </script>
复制代码
备注:
* H- E8 [- P2 X. l
  F" c0 m( k: D0 I/ D如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
" Q9 B+ f  K- Z" X. g; }. `; k# I可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
9 b. o1 O; G4 j) L' M5 ^; k! u9 G4 E8 X" H

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
! ]$ G5 v1 y9 s3 v' H' D2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成3 k  ^8 X; c& M6 n& X
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。  I  `6 t& n* t8 j8 y8 d# h
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。2 K  w% I3 R) Q) p4 j( _! H; N: s: H$ r
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
# J1 u1 b3 K* c0 Q0 l, x则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
3 |- r3 Y0 _  j6 _, c比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。# Z  c' w+ z/ P; H# f# y- S
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.! q' i) N) @8 W
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象
0 H9 n  k: H1 P* D, c/ @clearInterval(对象) 清除已设置的setInterval对象

略举两例。
" U3 i3 V8 i" _) X例1.表单触发或加载时,逐字输出字符串

5 A- l" K! C1 J0 v, A
  1. <html>/ x% B) U9 N6 Q, N3 p1 L+ P: F
  2. <head>4 E+ [* f' q9 l4 M: w% ]6 ^# t1 f( `
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />% q( \) |7 _( E2 z" D* A
  4. <title>无标题文档</title>
    9 `3 u  u! \/ ?; A
  5. <script language="JavaScript" type="text/javascript">
    5 F0 d. }6 l- O* l
  6. var str = "这个是测试用的范例文字";0 V4 R* H# _! }( r$ h# z, a
  7. var seq = 0;
    + I( I. [% r7 y2 B8 E2 s
  8. var second=1000; //间隔时间1秒钟
    7 R: c2 O: m/ E) l& t- _& O! W
  9. function scroll() {0 Y4 I* p" J9 Z
  10. msg = str.substring(0, seq+1);8 Q& A7 C  R$ b4 o- B8 W
  11. document.getElementByIdx_x_x('word').innerHTML = msg;% q8 H2 `7 k5 _" z
  12. seq++;$ i/ Y0 B8 B; \$ C3 n
  13. if (seq >= str.length) seq = 0;& k/ u' P( [% x8 D, m
  14. }
    & y8 M) a* n- x6 w# X' I
  15. </script>
    - e8 ?  B. f* P# ~0 k( X
  16. </head>/ ?" r; l! H  [$ q# H, j/ e# N
  17. <body onload="setInterval('scroll()',second)">, p  ~! @- R0 w1 m3 s3 y9 ]
  18. <div id="word"></div><br/><br/>
    " a: ]' [! e$ T8 P3 c, V
  19. </body>& K0 N1 F' s9 {
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
+ s* S' A6 w' \: ^) e: P: W/ G' a
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    6 h) i! `  Y2 y
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    ) d  u3 Q( p  W6 [+ V
  3. <head>
    . e" ?" _7 E% b! b# ?3 E2 r
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    6 p0 a# c2 b7 k
  5. <title>无标题文档</title>7 n! o1 O2 k' Q0 D5 Q& Z
  6. <script language="JavaScript" type="text/javascript">
    / U! H; F9 u) _
  7. var second=5000; //间隔时间5秒钟* a6 A- ]# @8 a* S3 p+ F1 q0 g& Z4 \
  8. var c=0;  ^! U$ j0 b" _1 n' e
  9. function scroll() {
    ( ?3 M# p4 M- ~+ n8 r; T
  10. c++;
    8 |+ B) \9 r5 V6 n
  11. if ("b" == document.activeElement.id) {
    ( `! i, d# `1 @9 P  ~/ e  _, w
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    ; e& h8 n) g1 ~8 o: }# \- [+ |) C& F
  13. if(document.getElementByIdx_x_x('b').value!=""){
    $ L: R( p, P* U
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    ; ]& q! p' W$ k) s3 I- c* n3 y  c
  15. }. ~& Q  X- X; ^8 M6 ^4 R& i
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    5 D* y" h" [; E- F
  17. }
    + Z0 T2 w5 c; H, s0 t
  18. }
    8 ?1 z! @% X! w/ I9 ^
  19. </script>7 g# _5 k* H' N6 [& r
  20. </head>, \9 Q. v* D6 M* `& w
  21. <body>
    ' z" ?1 ^: c9 M; b! l6 |
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    1 v( ^" f. ]* d& I- ?. K
  23. <div id="word"></div><br/><br/>% C( u/ ]9 g% |* S
  24. </body>
    : p2 f2 s8 \+ o2 U1 r, s* L
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
; \$ U$ o$ ^* X1 T0 W8 M
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    3 q! P9 S4 T+ k' @& Y2 q/ Z
  2. <head>
    7 Z- a9 u: h4 b& c  o4 T$ U; R
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    3 E4 g- d2 c: x
  4. <script language="javascript">8 {) R3 g6 w, m. R
  5. function count() {
    ( O! Q5 t  N; y2 w& e  i- ?
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";0 T2 X4 y- `/ s  y  x2 f
  7. setTimeout("alert('十秒钟到!')",10000); c! q. D6 g6 G9 k" c& T
  8. }
    0 q# I4 Y& K) r$ b* \
  9. </script>
    & {% y  S3 i$ ], G( i. Y! @
  10. <body>$ o* Q+ ^" {, V0 i: K2 K0 i' c
  11. <div id="m"></div>
    3 r* N% v+ o, [
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    , a& c; S7 F2 D  x# z7 `
  13. </body>
    $ [. j: y  ]4 \1 W/ P- }. @6 A
  14. </html>
复制代码
例4:倒计时定时跳转
3 j  ^, Y: h  C7 C
  1. <html>- T$ m! H) I. N2 s2 Z
  2. <head>
    & v" E5 e7 O8 w
  3.   <base href="<%=basePath%>">
    ) Q7 f+ ~' P; U% E+ k, N$ E
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    7 G6 ]3 Z4 R0 j3 V
  5.   <span id="tiao">3</span># k( i7 d/ @2 M' q
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……  C& N8 d* [- G" U# E( u7 t4 m( f# Q
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>, h9 w+ n7 \4 s3 u  `
  8.   <!--脚本开始-->
    6 P9 \& F* C# D/ D1 j6 Y! P3 D! E
  9.   <script language="javascript" type="">
    # I% U9 o, A: W: O
  10. function countDown(secs){
    ; ]$ G8 g7 y- J' D$ R& O
  11. tiao.innerText=secs;( C% |+ d! y  n4 b2 I
  12. if(--secs>0)
    / U$ ]( U3 Q- X0 ]4 z8 N( t
  13.   setTimeout("countDown("+secs+")",1000);
    ' h( v5 w& S" o% Q# Z. C% o' T
  14. }
    . j! y: o2 T$ u2 x9 k9 @
  15. countDown(3);
    $ G9 {$ h3 \3 J" A- ~4 H' Q5 {
  16. </script>, \9 @6 I; R- B, E9 O
  17.   <!--脚本结束-->
    4 F# Z; c; q- O! {
  18. </head>
复制代码
例6:! v* ?2 J, V3 w/ A9 v- V
  1. <head> ; K, x6 v( V4 x5 b- S8 u
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    : k. Z$ H( B! g/ |. |
  3. </head>
复制代码
例7:
1 f0 A. i9 j* }- C4 [5 |- C
  1. <script language="javascript" type="text/javascript">! M+ v; ]6 w& h  K* `6 _
  2. setTimeout("window.location.href='b.html'", 2000);! X1 F: O% |; X0 v: f# O
  3. //下面两个都可以用; r! ?# q5 E5 l% ?6 z( M) K
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    6 r) Y: x* p3 ?0 r7 N1 H
  5. //setTimeout("window.location='b.html'", 2000);
    # O. {- [, K* H+ `3 |
  6. </script>
复制代码
例8:5 Q' @' x. B$ l( z. G  c
  1. <span id="totalSecond">2</span>
    ' E6 Y. v% Y7 }4 F6 V2 I8 k
  2. <script language="javascript" type="text/javascript">3 Y& j4 u9 ^/ ]
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    $ j  u. V/ N2 z0 n, }
  4. if(isNaN(second)){
    % _2 u" y8 D* D4 z$ W; O
  5.   //……不是数字的处理方法4 x$ e9 _$ U, S! |9 y5 X
  6. }else{$ y- U4 q$ U3 P7 O" h+ b
  7.   setInterval(function(){, [2 f( m! g8 Q- f
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;6 P1 [' Y6 P+ y% T
  9.    if (second <= 0) {
    $ f8 m/ ^4 K% z+ I
  10.     window.location = 'b.html';6 A: {, M  Z& R& _  A
  11.    }
    ' o, ?8 c# y; n
  12.   }, 1000);! M" G% Y7 Y: m4 q
  13. } # N5 c& ~; P7 v) B. z! G: z
  14. </script>
复制代码
% M' M" y% v" L4 k
8 \! Z$ q2 }9 p2 h( G( s* a; u  x" j

& L9 I. q' z2 b: u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 12:17 , Processed in 0.122976 second(s), 19 queries .

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