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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器 2 p" O1 P, J% a- O  k
  1. <script>
    ) g$ ]( }# G* Q" q, @7 g
  2. //定时器 异步运行 : P) ?4 |% Y1 u  q
  3. function hello(){ " @) X  G( p. W0 v' U7 q' m+ ^* n0 R4 {
  4. alert("hello");   b- O8 \  t* w5 g. }
  5. } 3 G) v' h% j1 a
  6. //使用方法名字执行方法
      f4 M# m( g6 t5 F, {& X6 h
  7. var t1 = window.setTimeout(hello,1000); " H. h8 y  F& I2 N  O1 `2 w$ [
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    " g/ O. }1 L5 k
  9. window.clearTimeout(t1);//去掉定时器 6 ~! D9 ?% J( J/ d1 J
  10. </script>
复制代码
2,重复执行的定时器
5 ~: Q3 \' B8 m, z2 J- k
  1. <script> : V/ f$ h: P  {/ Q
  2. function hello(){
    9 g  D; p6 [& r  Y1 e
  3. alert("hello"); 8 w9 j$ r0 u5 |& Q
  4. }
    * _+ _# K+ ?, `) ~" V1 Y6 ^3 U
  5. //重复执行某个方法
    : p" Y* i& o5 r: i& T
  6. var t1 = window.setInterval(hello,1000); & a5 c9 Y7 w. N# E% a
  7. var t2 = window.setInterval("hello()",3000); 1 n3 o9 u3 k5 |) y' A
  8. //去掉定时器的方法
    1 v4 ^# |% [# w
  9. window.clearInterval(t1);
    9 Q# ?- K. O% O8 {, y
  10. </script>
复制代码
备注: * V" \0 z8 |* I7 e. M3 {% q+ @$ ^
/ w9 L& {& l2 j8 R
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
' P1 I% ?. v3 `7 ^, J可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
1 r, z* v% ^5 c0 d4 \, Y8 k8 Y- `# c1 u

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

1.倒计定时器:timename=setTimeout("function();",delaytime);6 U! E) ^9 p) l1 a7 H8 z" E# p
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成: o  f, P$ R7 x0 R
“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
( g) B, p7 S; A3 T& B  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。0 h7 F1 W) t% ^% g3 g
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
( R/ e; D2 j7 W/ o则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。) U, G9 h$ t6 H; s
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。5 \" d; `' w+ z9 J( Y: p
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.1 A, \, n, W% X- Y# D/ v
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象. i% O' v7 d6 H) Y0 C8 I7 g& D
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
% v! ^, ~  [+ o$ Q6 h! y  L5 [例1.表单触发或加载时,逐字输出字符串


6 Y6 G* d8 h- z* a) D% t# J
  1. <html>- N! d3 [; W# Z+ A5 q
  2. <head>" V# A' Q2 x3 _$ g% [
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    / E$ N; ]. E6 o7 U1 }8 N& n
  4. <title>无标题文档</title>/ M6 ~1 T6 B- N6 O# u1 a' U/ [. v
  5. <script language="JavaScript" type="text/javascript">2 r- ?( J5 Z0 _9 N( ~9 b7 m
  6. var str = "这个是测试用的范例文字";
    ! E5 O8 T8 }/ P8 i! K4 L
  7. var seq = 0;
    8 K3 {4 ^+ V) i4 s% Y
  8. var second=1000; //间隔时间1秒钟
    , H3 a7 K0 [8 Z" ]% y5 W
  9. function scroll() {
    0 f# Q( r8 [. \
  10. msg = str.substring(0, seq+1);( {7 i6 K2 B* Y( R& i0 m6 i1 j* D2 T
  11. document.getElementByIdx_x_x('word').innerHTML = msg;) V* T% ?1 \8 A: n, j# n4 O
  12. seq++;& a8 S; m4 {  ]" P5 ~4 Y' s; Z
  13. if (seq >= str.length) seq = 0;, l& w3 Z+ d+ v8 B9 c
  14. }
    % ?1 \/ D2 ^: _6 b$ K
  15. </script>" P* b# s8 u/ o/ @* E
  16. </head>
    1 j1 c5 g- ^; T# ~9 I7 E
  17. <body onload="setInterval('scroll()',second)">
    ( k' _$ y- J* ^6 ~& B  t
  18. <div id="word"></div><br/><br/>! b. I0 U1 O! H9 f+ n* O
  19. </body>' d" p+ y2 X7 `- ~: m1 W- ?- e, |
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
/ G. d/ w/ U2 T- j
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3 i3 D. P) n# d" v: K
  2. <html xmlns="http://www.w3.org/1999/xhtml">& L7 C3 D3 {( {# _
  3. <head>+ z: H% c. [; n% u: h
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />2 F. Z' h% ~* p( i! A; r8 J3 y
  5. <title>无标题文档</title>
    6 z- H( n: L: U/ g5 a' z, }
  6. <script language="JavaScript" type="text/javascript">, V& b: |' |$ N  P  ^
  7. var second=5000; //间隔时间5秒钟3 n. P# [% _  w( A# v& S
  8. var c=0;
    ' h5 q/ D+ ^2 p* l# J- E2 n
  9. function scroll() {
    & M* }7 I; b) d0 p
  10. c++;
    ; x, R" g) T- o  Z6 G7 M& g0 u
  11. if ("b" == document.activeElement.id) {
    : \7 Z; j. a  C% c
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    4 `7 f, h* g; @
  13. if(document.getElementByIdx_x_x('b').value!=""){
    ' v1 }4 h: q9 Q: g6 f/ U
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";/ z- V& \, r6 }* _2 Z
  15. }
    , u* X, Q0 w8 n6 L# g
  16. document.getElementByIdx_x_x('word').innerHTML = str;, ]- H/ u# o+ r; @' U( I, x# {* m% B0 M
  17. }
    # w( K& }8 j* m! R! c2 w5 U
  18. }
    / q- F5 |1 g" M( p, K( d' ^" d
  19. </script>" N9 J. X! |- a2 m; `5 O
  20. </head>/ R2 Z% h, k+ h0 x0 r+ I
  21. <body>( o' O& v( C# w
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    # b4 [% [' X7 |0 m: F( y; S
  23. <div id="word"></div><br/><br/>0 ?% i2 [0 F: L, i' o2 h2 e
  24. </body>
    $ T$ G, R+ m3 a. l3 C6 ]# X  i$ ~. ]
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。! {, Z" j2 }: Y/ K1 Y- D
  1. <html xmlns="http://www.w3.org/1999/xhtml">
      [, P% @. E' ]- J
  2. <head>
    . @+ X0 G% f5 Z, d8 E- w
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />2 n0 o2 D& z" g9 {& e4 ~! A0 W
  4. <script language="javascript">
    " ]9 C6 M% Q; a
  5. function count() {, Z6 _8 ?0 `3 s- O) O
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    & V- |& ~0 y, K% I
  7. setTimeout("alert('十秒钟到!')",10000)+ V: A8 p3 P' a
  8. }. Y4 {5 d- X0 [9 W! a2 [
  9. </script>
    ! S! Q5 [: h! z5 n- [& {* Z
  10. <body>* v* d' @. G# o! x2 l
  11. <div id="m"></div>
    # y. @# W6 N& ?
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    + c, n; M4 D! |  H' ^/ ]& M
  13. </body>
    " Z! J) R3 P8 b2 }) m
  14. </html>
复制代码
例4:倒计时定时跳转: ?: c$ q+ I2 e5 b
  1. <html># C. b0 M  H# e# A8 R
  2. <head>+ X8 r4 k$ o" E) h- a8 K
  3.   <base href="<%=basePath%>">
    - m" E& E" ]' i
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    + X4 M9 u6 F& a  E3 \; k
  5.   <span id="tiao">3</span>
    ) G4 Z3 H, y' \, t9 {
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……+ X# O# \/ x7 K# Z- w' n
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>$ T4 J1 d4 l( s7 V: }8 f
  8.   <!--脚本开始-->
    ; C8 o' T: \- Q! c2 ~* o& L
  9.   <script language="javascript" type="">- h9 |0 ]# \" M, A* B
  10. function countDown(secs){
    " ?) q! Q8 N  c& u
  11. tiao.innerText=secs;
    : p' q- r8 |7 X! w
  12. if(--secs>0)
    3 ^0 z5 M2 N! S; P8 v* i. X; N
  13.   setTimeout("countDown("+secs+")",1000);3 L* [+ X3 X3 A$ ~2 [4 k) m  k* Z
  14. }
    1 l2 F) m4 e2 g; a/ r7 n7 K2 W
  15. countDown(3);6 i- L0 e; v& {4 @$ c1 @  |
  16. </script>9 s( t% {' H6 c" Q* q& W, l  I
  17.   <!--脚本结束-->
    * W' S/ _9 \9 `! n+ {* k6 d& @& M
  18. </head>
复制代码
例6:
2 D; e. J/ }5 P. G
  1. <head> 5 h' t+ s2 Y* o* V8 t4 H' P" n
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    4 _: c6 B, m. T+ P7 G$ \
  3. </head>
复制代码
例7:% y$ c$ @+ K0 E; u! j% s4 M! u
  1. <script language="javascript" type="text/javascript">
    & s8 E- g2 U7 H. a5 y5 O; v4 H0 ?
  2. setTimeout("window.location.href='b.html'", 2000);9 D1 J; N# b7 n% p$ Y2 }) l
  3. //下面两个都可以用5 P# _$ f' |0 X; z: W' o
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    - |9 R7 o% {4 D5 K
  5. //setTimeout("window.location='b.html'", 2000);
      e) b9 h6 C# a9 [$ l0 o
  6. </script>
复制代码
例8:
" p0 q) I) w& N, ?
  1. <span id="totalSecond">2</span>
    : O8 J' b- }5 x) u' d
  2. <script language="javascript" type="text/javascript">
      f  u7 p+ C: n* }
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;/ g% r' p& _7 s" B: q
  4. if(isNaN(second)){
    : |3 I2 e% S3 |
  5.   //……不是数字的处理方法
    + [3 k# a0 X) {- ^
  6. }else{
    ) q8 [3 T7 E, p& k3 R
  7.   setInterval(function(){. n6 u9 A4 z  a& x  B5 y1 Z/ W% a
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    & i# `3 L3 t+ I% o1 X" t2 }8 ~
  9.    if (second <= 0) {
    0 O; }5 x: r, n7 `0 U; Z, z. c
  10.     window.location = 'b.html';
    & e, W6 q  @& w
  11.    }
    8 |! Y) Z7 I1 {: k: F& p7 _
  12.   }, 1000);
    & I1 Y& l" Z/ ~" A8 G( t
  13. } , c- f6 k0 E$ S# g( m
  14. </script>
复制代码
3 _( a' \2 s; D' G  p6 d. T% d

) {2 N* B3 c4 z1 f0 b. o7 f( F# f3 V8 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:11 , Processed in 0.054128 second(s), 20 queries .

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