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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
6 q  U( X! w9 F7 o8 X. F/ l  t- S' ~
  1. <script>
    / Y+ l' U- t2 J+ n# z% v
  2. //定时器 异步运行
    2 F& l- |$ e# N' f" k: @8 u2 ~
  3. function hello(){
    $ n* ?9 i2 C: F- a
  4. alert("hello"); ! f* I; e5 t& u* |
  5. } * E: D" H9 v* ]8 L1 k
  6. //使用方法名字执行方法
    # @- O! d; w  ]* G/ ^* Q
  7. var t1 = window.setTimeout(hello,1000); 2 w" s5 V; H# A1 _' c
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法 + {" @0 J. O  i/ y1 [% z
  9. window.clearTimeout(t1);//去掉定时器
    ! q* }4 v" J3 w; y
  10. </script>
复制代码
2,重复执行的定时器 ' Q9 c+ ]0 Z$ h( A
  1. <script>   s8 G5 [6 z. o7 e# X
  2. function hello(){
    8 F: C% Q# u( L& j! ~! w* M
  3. alert("hello");
    0 B4 f. X/ ?; J- r7 S1 p) n9 J" {) T
  4. }
    " q0 G/ p# a7 j( d- j- x
  5. //重复执行某个方法 4 S3 j# K6 L7 V  l  M, e, {7 Z
  6. var t1 = window.setInterval(hello,1000); 4 |9 |0 M. {3 r% {
  7. var t2 = window.setInterval("hello()",3000); 1 E# l$ U5 t' Y$ k5 E/ Y
  8. //去掉定时器的方法
    - J' P# @& z. X8 @# L
  9. window.clearInterval(t1); 7 K+ A/ H; |6 ~7 O2 m' P% F9 c
  10. </script>
复制代码
备注:
4 b: \+ C$ z" H1 h( R. n9 {7 q+ d4 N, i
如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决: 1 o9 z7 G5 t9 C( ^
可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。& v. U/ k% Z$ v1 C  |8 ]7 I

3 A: ~& {# O! {9 z

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

1.倒计定时器:timename=setTimeout("function();",delaytime);* k! a% \: D/ q" S: F
2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
2 z( n6 I, _( `; y“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
& U1 n. F1 ?5 R* V( `' M  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。3 i4 A' X% @7 Z. o& \
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,
, i% y5 K. E, N! n0 `$ z则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。# w  {+ B9 u: q  ?7 E: P3 k
比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。# m" k( X) U5 d" l' _: P
setTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.
' }. C' f5 w# I$ K2 y' `3 X8 bsetInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象" X2 C2 Y+ F. i6 T
clearInterval(对象) 清除已设置的setInterval对象

略举两例。
/ _* ]( |7 B5 l8 X: V% W例1.表单触发或加载时,逐字输出字符串

: [( ]2 a' ^& n/ c( X% K( L% |
  1. <html>: |8 Q2 J( G6 o% L
  2. <head>3 g7 H  r( ~! ~$ J+ b* p
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />$ n  \4 {4 n7 z7 h- L9 J$ ~
  4. <title>无标题文档</title>3 Q* e$ q6 W5 a9 d1 N3 C, C
  5. <script language="JavaScript" type="text/javascript">3 s3 K$ X2 O! d8 t, s1 o
  6. var str = "这个是测试用的范例文字";- i, l2 g) w1 C+ e* E
  7. var seq = 0;0 b& b  [/ g+ _% F7 D. l
  8. var second=1000; //间隔时间1秒钟
    2 e4 Z2 y2 @! r$ D. i0 j
  9. function scroll() {$ d5 E  A4 h8 r
  10. msg = str.substring(0, seq+1);
    6 n# p+ U6 ^9 {8 w, M
  11. document.getElementByIdx_x_x('word').innerHTML = msg;: l' m' I* C" T0 h7 o
  12. seq++;& q0 E# T: D$ ]  ]
  13. if (seq >= str.length) seq = 0;5 g# h& M' r$ g6 H  M2 c
  14. }
    9 m9 R" X, ?9 Q. F- p. m, E8 j
  15. </script>/ p5 {. K, X7 G  X$ V
  16. </head>! _- C, X' z  Y, k/ W
  17. <body onload="setInterval('scroll()',second)">; M8 h* G# _! n1 h1 H
  18. <div id="word"></div><br/><br/>. ]$ X; \9 X( S0 T  J& K$ ^; _
  19. </body>
    ' s+ X5 ~# j/ L! |+ j5 H+ ]
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。
* U9 B# h" a9 n1 i; |. t
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2 D1 V# n( d0 ~% u( x9 e2 V
  2. <html xmlns="http://www.w3.org/1999/xhtml">+ Q3 Q9 G* t3 A: D1 _7 d2 l# U7 r
  3. <head>1 y! y. N7 \+ m, j9 W
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />- Y8 x$ S! t/ T, I  X6 N
  5. <title>无标题文档</title>
    + H% {3 R  y& z! E( N
  6. <script language="JavaScript" type="text/javascript">0 `8 V. P/ }' {. C; u" Z
  7. var second=5000; //间隔时间5秒钟  h1 A, V/ r# R; z( W& N% o; y
  8. var c=0;' \8 A) ~* w; e2 A) O# e7 x
  9. function scroll() {- W; n( \+ s* z0 }
  10. c++;
    8 [! s' o  x* ^6 @3 m
  11. if ("b" == document.activeElement.id) {1 ^$ B# T9 }7 C+ e% R7 m. D, k
  12. var str="定时检查第<b> "+c+" </b>次<br/>";, t  D2 |, _' X9 l& Q
  13. if(document.getElementByIdx_x_x('b').value!=""){8 O8 p+ D( b9 a; ~- _$ B. h
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";
    3 l9 a2 |8 r+ t1 y
  15. }" n' k9 o; W0 T
  16. document.getElementByIdx_x_x('word').innerHTML = str;
    : L) b1 l) g# n5 H% u& }
  17. }. J; r$ O& I3 ~+ N2 U7 v2 A
  18. }2 B- j% N, X5 i) q% B
  19. </script>+ [7 F. H5 d- ]; a3 C
  20. </head>2 s: e" X: B( t7 U) L
  21. <body>
    6 g& j! T5 K2 B! W
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    ) F7 x0 {! u2 x( [2 r/ R
  23. <div id="word"></div><br/><br/>
    & ^4 v8 m8 L1 b
  24. </body>; t4 P& l0 E* R! c* i! Y  j
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
/ o7 q# v$ s( r7 C% W+ C
  1. <html xmlns="http://www.w3.org/1999/xhtml">
    ) Z% r9 J2 w1 b  o# m
  2. <head>2 c1 D( J+ J1 Q2 B5 p8 V  c; k
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    - X; _. F! {+ f6 F3 {& q; V
  4. <script language="javascript">0 D- C- V/ f/ X' F5 S
  5. function count() {
    , i) m+ |: b: N) v
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";
    ' |0 D+ d' ~. f: p
  7. setTimeout("alert('十秒钟到!')",10000)+ B* w! _8 q, }& e3 T& r
  8. }
    8 z) E( T8 k! a* m# W
  9. </script>% S8 |( E; r/ e$ l( {4 b
  10. <body>
    ; ^# O* v7 W0 ~& |0 B0 q% y
  11. <div id="m"></div>
    2 `: R+ g: O7 p# n6 }
  12. <input TYPE="button" value=" 计时开始" onclick="count()">2 B6 q4 o( g% k* O$ y
  13. </body>  s& r' m7 u5 }6 G8 P
  14. </html>
复制代码
例4:倒计时定时跳转
1 n( t' i' v1 ~* x5 }
  1. <html>
    ( f" R! _  s4 [+ B- A, \1 G; I$ k
  2. <head>% K2 \- f5 x& f1 o+ q
  3.   <base href="<%=basePath%>">7 Y4 O+ P3 J$ d0 x1 s
  4.   <title>My JSP 'ds04.jsp' starting page</title>+ Q9 s, Q$ l( T+ [
  5.   <span id="tiao">3</span>+ j3 z5 Q" n9 T" e
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……
    0 G: l0 l3 h# S8 ~. X
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>
    1 B' L5 A5 w. ?( z  W
  8.   <!--脚本开始-->
    - e  H* ~1 k$ H8 ]  u
  9.   <script language="javascript" type="">! |. D* T9 U1 @2 M. @4 H, Q
  10. function countDown(secs){% D# V1 N3 r8 h" h
  11. tiao.innerText=secs;
    ; o9 S! z' a; k/ K7 b7 y
  12. if(--secs>0)* ~* [. k1 s$ S- @7 T& [
  13.   setTimeout("countDown("+secs+")",1000);
    * e/ J9 @. S) b7 _* ]' m# `
  14. }& w: _) k1 w: A- e# H9 [6 Z- R
  15. countDown(3);4 d- P% \; x4 v6 H2 f6 l! D
  16. </script>
    . Y8 D2 \, R6 p, e9 A- Z- L
  17.   <!--脚本结束-->5 p: B. g( t1 U, S* m
  18. </head>
复制代码
例6:
0 T+ F, t7 W) h" \; R0 L+ V6 E3 v
  1. <head> " R" J" A/ x9 R/ r0 }+ s
  2.     <meta http-equiv="refresh" content="2;url='b.html'">
    * c& n! |0 g$ h. K, r! v
  3. </head>
复制代码
例7:
' R0 k" H+ F+ U& M
  1. <script language="javascript" type="text/javascript">" y! I# Q; i6 a3 T- Z4 `
  2. setTimeout("window.location.href='b.html'", 2000);
    4 d, D& ]6 {; X, e( g
  3. //下面两个都可以用
    1 I1 ]  P2 {1 Q# @2 L4 C4 J
  4. //setTimeout("javascript:location.href='b.html'", 2000);
    6 D) a, G7 [$ X0 j6 S1 R
  5. //setTimeout("window.location='b.html'", 2000);
    7 i* t, y* x5 q4 v3 j' I
  6. </script>
复制代码
例8:$ w+ j. L' k! A2 }* a* W
  1. <span id="totalSecond">2</span>
    9 D9 _4 c4 l! T* g% O
  2. <script language="javascript" type="text/javascript">
    7 L0 K% C" S  E: F* L  `
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;0 F/ w- C! u# d
  4. if(isNaN(second)){
    : s( G5 z3 H. @! x
  5.   //……不是数字的处理方法+ C* Q2 x& a0 z4 }
  6. }else{
    ( r2 d% R& v/ Y8 N" u
  7.   setInterval(function(){
    7 x/ Z" W! n( Q/ }1 y
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    / A- z/ F( y5 x0 t( x' y$ y% t
  9.    if (second <= 0) {
    0 [; z, v9 A1 y8 E
  10.     window.location = 'b.html';. [0 G" \7 [) {  y- i& Q: _( H( X
  11.    }
    ( O- p. O, S$ y/ X+ G# _8 N; x
  12.   }, 1000);! D  C* I) I' A" F( R% M5 ~+ {
  13. }
    7 b& c; W1 i( D2 g7 J
  14. </script>
复制代码
$ }1 \: v/ Z' p3 H
- P  W) d& r% \4 ], ~+ o
! w: H6 f- |9 ~9 ?: u- l% A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-29 11:24 , Processed in 0.139359 second(s), 22 queries .

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