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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
6 j& p" M. A8 |6 I
  1. <script>
    , @- T# D2 e2 [/ [7 Y
  2. //定时器 异步运行 9 ]2 v! u0 {7 V& {( ?
  3. function hello(){ 4 d( }# c' B2 c
  4. alert("hello"); $ S# |# |0 i$ v& j" W- l
  5. }
    ) [: _7 A( y3 s! p. `$ G
  6. //使用方法名字执行方法
    3 b4 V, i1 n/ T+ F, C0 ]
  7. var t1 = window.setTimeout(hello,1000);
    + q( b) W; O; }: `4 |
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    ' `' n# e" N' P# U: I, W- u
  9. window.clearTimeout(t1);//去掉定时器 ) Z, x. M- R) E7 B& }
  10. </script>
复制代码
2,重复执行的定时器
6 l% g% c, y% ~0 x$ K4 D! j, t) d
  1. <script>
    " h: P* E% z! P- @2 ]0 [
  2. function hello(){ : R/ U, @& ^& ?
  3. alert("hello");
    - L$ w, f, [5 [! m8 o4 u
  4. } 4 |9 a, j4 {/ I0 m% T: }" F5 |
  5. //重复执行某个方法 % s7 s& m5 W1 z$ _$ W
  6. var t1 = window.setInterval(hello,1000);
    ( D- H1 w/ i9 M9 x0 P
  7. var t2 = window.setInterval("hello()",3000); ) b* [7 G, }6 `
  8. //去掉定时器的方法
    ( V! i+ u( y: j
  9. window.clearInterval(t1);
    ' t4 |) ~& p; q) |; D6 q# A7 F
  10. </script>
复制代码
备注: 1 t8 I% g& F# e. x  s: T

9 j6 ^; c2 R5 b如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
* h% G% F- ]" G. G. ]6 K/ u可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。/ W5 h& i  `* s6 P, j5 U+ I8 K# M
- F6 D7 A0 {0 U0 B- g

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
1 b. }1 J% w" k, k4 w9 P2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成/ H( f# Y7 o& v7 J8 j9 D
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。& Z, g+ `, X8 u+ U0 V
  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。# H; h3 ~, T) e6 m- E
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
0 Z  b) \! I( _9 t0 h$ t& K: I则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
+ M* j. O9 ]6 Y) ~7 L6 a% N! _' A比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。, g* f3 C! w' A2 t, {; M6 @
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.# q+ w' h/ a( H& A2 T8 x* d
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象7 X3 ~2 s. w. t3 a# W; V) L
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
3 W, y1 S$ b) o例1.表单触发或加载时,逐字输出字符串


; `. F  Z  K( T3 C( c1 P$ E
  1. <html>
    % D4 D; x# Z! L
  2. <head>
    5 J8 \, w; q8 S" u0 E
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    + I, z  y* p6 v+ n7 @
  4. <title>无标题文档</title>
    : e# r# \* y4 u$ W; O
  5. <script language="JavaScript" type="text/javascript">+ d4 z" @8 |0 {) p: U4 Q% ?, _2 k
  6. var str = "这个是测试用的范例文字";
    1 I- _2 \/ w7 A6 ~
  7. var seq = 0;# q$ ?$ z' X% X. V2 O/ e
  8. var second=1000; //间隔时间1秒钟6 d) D6 D0 J. ]3 e; ^3 L2 }
  9. function scroll() {/ }. U' {4 M9 h1 ^' T
  10. msg = str.substring(0, seq+1);2 r( z8 ]+ E. R6 L; A6 T
  11. document.getElementByIdx_x_x('word').innerHTML = msg;5 _$ Z- D( P" ?) X
  12. seq++;
    + [3 g& R# b% s2 }) t, a( K
  13. if (seq >= str.length) seq = 0;* I/ l6 k2 M+ g. ], [6 s0 T4 M
  14. }+ @' {: M4 _3 d+ ^- r
  15. </script>0 L, {! ~, V2 D6 \
  16. </head>
    ; _) E+ {" m: I- i$ f
  17. <body onload="setInterval('scroll()',second)">" c3 _6 P8 Y" [
  18. <div id="word"></div><br/><br/>
    - A  X* H. s2 J0 {  y! c
  19. </body>4 p6 S; {& L+ T2 V
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。, V- n6 {9 G( l! z8 S6 h/ Z5 K
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">; n5 v4 l2 P# w" O$ h
  2. <html xmlns="http://www.w3.org/1999/xhtml">0 _5 P5 t  U  t* ]# C) F& \7 a
  3. <head>9 ^! ]9 D+ i8 l
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />8 w( t& d. c" I0 @/ `/ x( z+ B
  5. <title>无标题文档</title>7 F0 \/ M. E) A/ O6 @* I5 p
  6. <script language="JavaScript" type="text/javascript">
    ; S  n  U, {; r- a* {
  7. var second=5000; //间隔时间5秒钟7 o8 t- ?- F- M, K+ a
  8. var c=0;
    3 g5 [  s6 B- T9 a2 S, t
  9. function scroll() {
    1 m& c1 l3 B8 ~9 {! H
  10. c++;
    ' P1 ]' j# \1 s) M5 @' v" H
  11. if ("b" == document.activeElement.id) {
    2 _: o$ e8 m# W( U
  12. var str="定时检查第<b> "+c+" </b>次<br/>";, s; A& Y8 T, T5 j$ j2 ]. s
  13. if(document.getElementByIdx_x_x('b').value!=""){
    ' o3 d& P( i3 c$ K- D
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";& r2 K$ c$ l1 u$ E2 v7 v
  15. }7 F. p8 G! [  Y
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    . G) }& f8 Y' A0 R( I$ Y
  17. }+ `; y! U$ Q. Q- L; r& B! a
  18. }. F5 \/ |. F0 f2 R  S* A* v
  19. </script>* G! ]  V9 T- p
  20. </head>- p1 f$ p+ K9 c3 }( ]# ^8 _
  21. <body>
    - d* ?, [$ }/ p* N7 h) c. J
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>( N4 X) `# p% [, q! j
  23. <div id="word"></div><br/><br/>( f, ~% Q0 Y% d9 f% k! a: B
  24. </body>, h4 N% s5 {" \" i- ?
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。: H7 Z) s, K+ ?. U4 p
  1. <html xmlns="http://www.w3.org/1999/xhtml">2 ^# z6 U1 ?# o2 R
  2. <head>5 z" g$ w" O/ E0 E/ }, F- Z- f/ J* r
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />( j% O5 q  N; B5 t
  4. <script language="javascript">8 Z2 }$ N1 V& x* X9 z
  5. function count() {4 o6 j2 ^0 h5 v: S
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    $ }& i. ?7 h) o9 r# S2 R0 P3 A) R
  7. setTimeout("alert('十秒钟到!')",10000)
    & ?! d5 C+ Z1 ]
  8. }0 Z. x! \$ o0 W* m
  9. </script>
    ' T1 ?' F" i2 Q& b8 F/ y
  10. <body>
    ( [( D! ]$ j, \# r6 ^: t( B
  11. <div id="m"></div>
    5 C2 \7 K' W4 _; E( _% l
  12. <input TYPE="button" value=" 计时开始" onclick="count()">8 Z6 P; l7 s+ T) I! B+ b$ s% I
  13. </body>4 k8 G  k: x) M( f
  14. </html>
复制代码
例4:倒计时定时跳转8 k" \- Q, U& O: M, N" i1 B5 C+ R
  1. <html>+ H5 x* u8 G+ ^5 {) W
  2. <head>- A0 s3 P; d* y# `3 a; j( }
  3.   <base href="<%=basePath%>">/ ]- s9 m+ ^: J8 ]& {
  4.   <title>My JSP 'ds04.jsp' starting page</title>6 k. s3 ~# P0 c8 E' H; _
  5.   <span id="tiao">3</span>
    9 |- T  p6 `) v/ e  D
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……6 ^/ V) r, O1 ]; u
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>! ~1 f) g! I' [: P" s
  8.   <!--脚本开始-->6 ]1 a! y" d; P/ [5 B4 j3 v
  9.   <script language="javascript" type=""># K/ Q) F+ u9 k2 c- ~3 E
  10. function countDown(secs){
    8 a& q9 K7 G9 O
  11. tiao.innerText=secs;  I; l; [3 D( O, d
  12. if(--secs>0)
    # }9 H( X; h1 n! Q: |' c7 Y5 {
  13.   setTimeout("countDown("+secs+")",1000);
    / i% |, h6 {  ]' ^' b7 n0 N- r) h
  14. }' z4 R0 R7 Q/ w$ G; q! [1 K, b
  15. countDown(3);
    2 _. f) v1 w4 x% p
  16. </script>
      D- w$ p0 c% S7 e8 M
  17.   <!--脚本结束-->
    7 R. q9 {( \. n0 h9 i6 G
  18. </head>
复制代码
例6:0 Z* M- f" A! k: d* s
  1. <head> 2 {/ P* T- b4 R* P0 t
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    " ~& G. o- V8 g
  3. </head>
复制代码
例7:
  r# M: d  R" z& b3 R( l& A0 Q0 B
  1. <script language="javascript" type="text/javascript">
    9 m4 T3 U% }& c* y0 r
  2. setTimeout("window.location.href='b.html'", 2000);
    % a8 A5 S& X3 K* l8 f' V8 k) B
  3. //下面两个都可以用# N" i+ Q+ t) `& x. I+ }
  4. //setTimeout("javascript:location.href='b.html'", 2000);# P8 ~" ]; Y& |! n5 w/ h1 e8 J! s
  5. //setTimeout("window.location='b.html'", 2000);
    5 a$ \1 L+ q0 o. g" {! }) {
  6. </script>
复制代码
例8:) F4 s/ y/ h7 N5 h; G& M1 f' C( e
  1. <span id="totalSecond">2</span>6 }5 ?5 D# R' h  r. @
  2. <script language="javascript" type="text/javascript">
    + e  B7 R4 Q. g3 C
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;! G  {( f- A0 F/ b; d8 w
  4. if(isNaN(second)){
    2 K. I7 f* w! h7 b
  5.   //……不是数字的处理方法
    / D% A8 g* u$ m7 C. ?. F9 l: K; G- C
  6. }else{
    6 j2 F  Y* s6 Z* [( U7 K0 K
  7.   setInterval(function(){
    : m6 q9 e: C* d
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;5 Y& i# D% {5 Z; z
  9.    if (second <= 0) {: v  d2 T7 `$ _  ~+ h
  10.     window.location = 'b.html';. ?9 T7 q3 @" _; W3 d8 A$ Q
  11.    }
    3 s; D* W$ \+ F; n
  12.   }, 1000);
    ( ]7 N" N  U0 L
  13. } * w* S9 S/ v1 w
  14. </script>
复制代码
0 P7 a% {' ^( s

: [5 M( z# A' L! H
2 c, I, p; [$ L0 y" l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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