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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 ; R1 q! e2 }0 S/ U% s4 m9 i3 _$ e
  1. <script>
    / `, h3 j9 W2 V
  2. //定时器 异步运行
    7 D" N2 c# Y$ \: G
  3. function hello(){ 9 y2 V, c: x6 J# y' y$ ^
  4. alert("hello");
    8 H1 @- v  }* B. I/ k
  5. }
      j* n2 ]( n" R" z9 a2 J9 ^3 w
  6. //使用方法名字执行方法
    : q' v5 Z: ~& }, ^
  7. var t1 = window.setTimeout(hello,1000);
    ( @8 e9 N3 k7 R" E! r- }/ o& ]( q
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 7 M* _1 o% @/ b7 C
  9. window.clearTimeout(t1);//去掉定时器
    & k% c% _7 W7 j6 G, G0 X4 j; c
  10. </script>
复制代码
2,重复执行的定时器 4 K. n+ [+ `7 h$ N7 ^3 v
  1. <script>
    3 F' z! D2 L- i0 P
  2. function hello(){ 7 U' c' J) H' L; Q! `
  3. alert("hello"); ' Y/ h1 z9 y% s7 e: n
  4. } ! d& a, n, I; B! r$ K- J+ [
  5. //重复执行某个方法 ' z+ j3 T: j5 {6 Q: v7 \5 d0 p: {' v
  6. var t1 = window.setInterval(hello,1000);
    5 P5 M4 }1 V1 W! \) @$ U1 `
  7. var t2 = window.setInterval("hello()",3000); + a+ f# N: B1 F# `" f7 \
  8. //去掉定时器的方法
    + x) k; o+ y# o" n
  9. window.clearInterval(t1);
    & I3 H$ K! L. x' x# S. I
  10. </script>
复制代码
备注: # H  t! t3 `" u
3 X1 t; x9 m& @0 n- P8 C% v
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: - w; |2 b2 P1 ]1 c& K
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
& b6 L& K; R1 g2 J% R/ g0 p' p9 ?2 @$ a# L

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

1.倒计定时器:timename=setTimeout("function();",delaytime);1 @! h0 r# Z6 C, \
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成- \' Y9 y7 Y, x2 y/ Q; X& R( g) A
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
" ]3 O' Q. C4 P2 a2 F* t- ^  Z; g+ W  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。
0 G9 \9 R# H# y" g' B; A比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,: _; w0 C! R" x: ]3 g. C8 s) o) z
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。' \. ^( {  z9 D
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。, ?# Y6 m+ Z7 K/ p* p* B/ f' w' z9 n% {
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.  K+ \- T0 K4 l# v
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象1 Z+ Z+ I8 |* I6 c+ M" m
clearInterval(对象) 清除已设置的setInterval对象

略举两例。0 J/ _- T1 b; F) Z  _4 U
例1.表单触发或加载时,逐字输出字符串


( h' O  _/ l: q
  1. <html>6 M( n$ Q4 \8 Y( K1 P
  2. <head>
    + Z) H& S( p6 F  L: [% ~. H" M
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    ! E8 G# x4 Y# M. |  V4 x
  4. <title>无标题文档</title>7 B  ^' |6 U( v( Q8 o
  5. <script language="JavaScript" type="text/javascript">
    ; Y9 G2 G2 B0 t
  6. var str = "这个是测试用的范例文字";
    4 r) w( h0 v5 u
  7. var seq = 0;# N+ f- ~0 D) g/ R& \/ W
  8. var second=1000; //间隔时间1秒钟
    * f  C# t: ?/ B% ~) Q
  9. function scroll() {
    / ^0 H/ g6 g: D2 e. G! C( z4 a6 T
  10. msg = str.substring(0, seq+1);4 s/ ?4 d5 ?( Y6 p- C5 o
  11. document.getElementByIdx_x_x('word').innerHTML = msg;
    : N3 u* p6 K7 l
  12. seq++;0 n+ M; w1 D0 B* }
  13. if (seq >= str.length) seq = 0;6 x+ x* L, b+ H9 e
  14. }5 |3 o# d! u4 r5 d: W3 R
  15. </script>: V( w. O( a+ P( J. K( a9 V
  16. </head>
    0 X3 q  q2 f0 s3 u
  17. <body onload="setInterval('scroll()',second)">
    0 d! G1 s/ D1 D' x9 w. k/ R
  18. <div id="word"></div><br/><br/>' M+ f9 Z/ }0 ~+ {
  19. </body>
    4 D9 v' a/ B* J6 P3 ~) c! A0 W: v
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。. r1 V! K+ S( W$ B5 G
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      ^( r/ i, l) ^8 c2 C
  2. <html xmlns="http://www.w3.org/1999/xhtml">  c9 Y" N& a( _
  3. <head>
    ; O1 o# N! z5 b, F8 d
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    9 @; {2 w; y, W( y8 a( g* V
  5. <title>无标题文档</title>& N! F& e& t$ e( `2 M
  6. <script language="JavaScript" type="text/javascript">
    $ V/ A0 v$ w+ {8 a" M$ Z, n  N
  7. var second=5000; //间隔时间5秒钟8 d( d; Z2 U7 ]# N# X8 Y' z
  8. var c=0;/ R* q; {9 R+ o9 B$ F! F) F
  9. function scroll() {
    4 n! ?/ o. S& _6 N
  10. c++;6 x; x/ E& @( P" l
  11. if ("b" == document.activeElement.id) {, l5 k/ S) T$ g% ^/ y
  12. var str="定时检查第<b> "+c+" </b>次<br/>";( G% V" H2 A$ n9 s+ K) w0 P
  13. if(document.getElementByIdx_x_x('b').value!=""){
      U0 Y. L" V+ R7 O* {
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    8 l! h7 A0 B* Z5 u9 J; v
  15. }
    / }% A* Y4 w/ f' `  M3 |
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    8 |2 @/ K- j! a3 r
  17. }
    & G8 G+ W1 I0 u: q0 i. F
  18. }
    / p6 P& w) S* |( c
  19. </script>
    , d+ F8 B$ |9 K* r' j( b( q
  20. </head>
    : ]: @, c/ M: N* i( `
  21. <body>+ f# x. v6 ]/ v( M- p
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>7 z$ f& a  F- g! G! P2 y( R
  23. <div id="word"></div><br/><br/>
    ( E  c" ~* [" I  _4 l- U: m
  24. </body>7 _8 M. o% c+ J* c1 u2 \0 W1 Y
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。$ y! J3 U/ j% R  J
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    $ @4 v# i1 e0 R# W1 U' M
  2. <head>2 {( f* }9 ^% Y6 e
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    - O' X, J% C5 o0 J- H0 p
  4. <script language="javascript">8 k7 D4 P3 S+ H8 k  k) Y+ [
  5. function count() {. |- n& a  g. ]6 |! q# ~( h
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";( N: S0 J8 ]) g6 e' E
  7. setTimeout("alert('十秒钟到!')",10000)3 P& G+ U6 n$ x$ Y- l3 X8 ]. u
  8. }
    $ Z# a/ H- Z* \/ |" H
  9. </script>& f! I, l' G6 e. R: d; R4 L0 P* S
  10. <body>: @8 g$ f" w* A! j) y5 N- d
  11. <div id="m"></div>
    ; a: C# A' ^: T7 ?) F4 Q2 ?3 B
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    ' k. [5 Y' _+ ~8 |
  13. </body>( [5 Q8 ?( H* {
  14. </html>
复制代码
例4:倒计时定时跳转
# E/ E7 d* v! O9 q
  1. <html>
    & k9 _; I% H$ c1 r0 X/ L
  2. <head>) y6 {3 `5 h6 c/ I& ?! m4 ~
  3.   <base href="<%=basePath%>">
    , C3 u$ X+ y: e& `
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    / f+ L  m1 r! ?0 {( i3 ^& e" Q
  5.   <span id="tiao">3</span>
    ! F6 Z- [. C9 Z: x3 R
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    / u+ P  X; j9 _$ J. x" w
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>; Y' d: x: F# e8 U; e4 L
  8.   <!--脚本开始-->0 h. `+ a$ B: u: X
  9.   <script language="javascript" type="">
    3 M! e" m9 J8 W  x2 ^
  10. function countDown(secs){6 K, \% P) l- i
  11. tiao.innerText=secs;( M/ i: u( P' F% ^
  12. if(--secs>0), L3 r* r' m. A3 U) T6 u
  13.   setTimeout("countDown("+secs+")",1000);
    * d0 \. g5 ^* `+ I
  14. }1 p: F* j- ^, K" W& x* b- _
  15. countDown(3);
    5 h! P3 i6 ]/ f  X0 s$ i$ u( B4 ^
  16. </script>
    : W, W' Z: P- g1 f$ |. R
  17.   <!--脚本结束-->$ j: ?* r- I- Z  _/ B: E9 d5 H
  18. </head>
复制代码
例6:9 ~: L' @2 h8 H3 W' o
  1. <head> . x; ]/ _; S% ^1 t# ?
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    6 }  m5 c& X4 K5 C
  3. </head>
复制代码
例7:1 \& b2 h5 u$ B: ^  [9 \
  1. <script language="javascript" type="text/javascript">
    8 N- ~' W: a4 e
  2. setTimeout("window.location.href='b.html'", 2000);
    ( V7 Y  I0 }, J( y% P4 M, @
  3. //下面两个都可以用8 F0 q" V, X1 V- S- {& T
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    0 `) V8 D! E% V  p& \9 y
  5. //setTimeout("window.location='b.html'", 2000);
    4 n+ f0 _2 r4 j0 e  |3 e0 K
  6. </script>
复制代码
例8:
4 V4 l6 D  j& K0 h
  1. <span id="totalSecond">2</span>
    9 \5 [$ d* ~! H% q8 s9 `
  2. <script language="javascript" type="text/javascript">
    9 ?! h, o( _) I2 P
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    4 W" r+ \8 u" J, I
  4. if(isNaN(second)){
    $ W7 v: U* T3 ]- e. f6 t
  5.   //……不是数字的处理方法
    3 |: ~5 ]* Y, b, ~; q9 G
  6. }else{
    4 h6 o/ _7 |* z; _; [- U' a0 y
  7.   setInterval(function(){
    ( h  |) c, r4 l! ?7 V4 C
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;8 l% q$ T8 z, Z' H
  9.    if (second <= 0) {
    3 z3 o9 b& T. F' R! E& U
  10.     window.location = 'b.html';
    ) p5 {/ k% ], X! o$ P; u
  11.    }; D7 I8 r# V5 i" `
  12.   }, 1000);
    # ~5 O4 M- Q7 L( r3 M6 u
  13. }
    : n2 w# Z; p% V
  14. </script>
复制代码
' V! Z* \4 z$ O% Y: N4 e% G1 \) F

$ d$ o$ e" Q( f" A
% g! t0 B+ q- o8 N; z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:42 , Processed in 0.070709 second(s), 19 queries .

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