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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-31 10:57:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,只执行一次的定时器
% c- z% ]; t, M) U- A9 n8 U9 Z# S- x
  1. <script> 9 Z! K! Q% w- u& u! U
  2. //定时器 异步运行
    4 f+ x! g( |. v# P& \7 E5 [
  3. function hello(){ : l, Z, D9 B" }  k, b6 b5 @" U
  4. alert("hello"); ; z/ ?, a4 L+ m* H  m* f' M  R, z
  5. }
    , p6 S, _$ u( Y. ^9 |
  6. //使用方法名字执行方法
    5 q8 O9 n! D' R: @( Y
  7. var t1 = window.setTimeout(hello,1000); * _* E/ \, S  ]7 q, T
  8. var t2 = window.setTimeout("hello()",3000);//使用字符串执行方法
    / k' H# T$ Y9 Y, _9 Q
  9. window.clearTimeout(t1);//去掉定时器
    9 X& I* o* x2 z) L& Z: X' a
  10. </script>
复制代码
2,重复执行的定时器 . {* w+ Q# s$ [* |+ ]: M8 }7 \
  1. <script> % S1 ?/ k' ~. k9 {+ w) j
  2. function hello(){
    " j$ J9 k$ _1 A$ M) O0 U' d
  3. alert("hello"); / K* d- ~3 A5 l( p( J" B" U
  4. } 6 W2 s  `- V' F/ B+ v) J* N* f
  5. //重复执行某个方法
    . f0 x( h0 @& D" _: N& o8 `. t( q. K
  6. var t1 = window.setInterval(hello,1000); . @" }$ Y3 ~" G, P: X- b6 O! I
  7. var t2 = window.setInterval("hello()",3000);
    , K  S+ J0 [( m1 E
  8. //去掉定时器的方法 ( M: M9 B9 S4 j5 Z+ a$ Y
  9. window.clearInterval(t1); " M+ j1 J7 Q; ?& h1 S# C
  10. </script>
复制代码
备注: & K7 d/ n7 E: q7 v% O+ c* _9 A

" d' i7 h4 F" ~  j& P如果在一个页面中有两个方法,都是在页面加载完成之后执行的,实际却未能按先后顺序执行,可以参照如下方法解决:
. G" h8 A  U: e- f可以在onload方法中添加一个定时器,设置一个定时器,“延迟”一段时间之后再运行,即可认为区分页面加载运行方法的先后顺序。
( b; s# O6 L8 `: C; M* D& p) D" U0 J" x: V4 e* k, A! W1 M; w/ B$ z

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

1.倒计定时器:timename=setTimeout("function();",delaytime);
; }+ d0 O; D0 z% U% h+ U# ~2.循环定时器:timename=setInterval("function();",delaytime);

第一个参数“function()”是定时器触发时要执行的动作,可以是一个函数,也可以是几个函数,函数间用“;”隔开即可。比如要弹出两个警告窗口,便可将“function();”换成
2 W1 B& \, h% M% i* X0 ^9 E; _7 J/ p“alert('第一个警告窗口!');alert('第二个警告窗口!');”;而第二个参数“delaytime”则是间隔的时间,以毫秒为单位,即填写“5000”,就表示5秒钟。
- P$ g: ~6 R  G/ W( {0 P  倒计时定时器是在指定时间到达后触发事件,而循环定时器就是在间隔时间到来时反复触发事件,两者的区别在于:前者只是作用一次,而后者则不停地作用。( b3 ^) a3 m$ |; s; O0 T* A4 Z
比如你打开一个页面后,想间隔几秒自动跳转到另一个页面,则你就需要采用倒计定时器“setTimeout("function();",delaytime)” ,而如果想将某一句话设置成一个一个字的出现,/ c9 L/ D3 d! z6 s2 G% a0 e' x
则需要用到循环定时器“setInterval("function();",delaytime)” 。

获取表单的焦点,则用到document.activeElement.id。利用if来判断document.activeElement.id和表单的ID是否相同。
+ u, K7 ]8 H3 @' `% l比如:if ("mid" == document.activeElement.id) {alert();},"mid"便是表单对应的ID。

定时器:

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

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

setTimeout(Expression,DelayTime),在DelayTime过后,将执行一次Expression,setTimeout 运用在延迟一段时间,再进行某项操作。
' Z- D. ^6 P6 ~% I4 ysetTimeout("function",time) 设置一个超时对象

setInterval(expression,delayTime),每个DelayTime,都将执行Expression.常常可用于刷新表达式.5 z( N$ G! w9 T
setInterval("function",time) 设置一个超时对象

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

clearTimeout(对象) 清除已设置的setTimeout对象! ?$ ]7 x& ?, C( V8 h# R7 H  z
clearInterval(对象) 清除已设置的setInterval对象

略举两例。; m  \% o- U  p3 C6 Z
例1.表单触发或加载时,逐字输出字符串


) }! z( W# J/ M! J' [7 [7 ^" C/ p
  1. <html>
    # m! |& z9 v. D% N1 E1 J9 Y
  2. <head>- N! a5 ?1 j, x! B  p' y, W, G
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />7 \9 X2 v# W* N: V9 `4 ?
  4. <title>无标题文档</title>
    ) ?2 A$ }( V8 n, D4 ^
  5. <script language="JavaScript" type="text/javascript">8 Z9 K$ Q: F% w# B% a
  6. var str = "这个是测试用的范例文字";
    1 t) F& l0 V" i
  7. var seq = 0;; C# h& V2 q) ]+ Q/ b
  8. var second=1000; //间隔时间1秒钟' j5 G# L2 X0 d: [( ]3 I# @* [
  9. function scroll() {0 _1 @  e5 p# q% U9 k
  10. msg = str.substring(0, seq+1);
    7 v: R" P2 E9 x4 m* e  k% {5 b" Y
  11. document.getElementByIdx_x_x('word').innerHTML = msg;7 D5 ^3 M* ~% ~4 ]8 b" H- @
  12. seq++;- A* s3 v/ ]% L2 w" [$ j
  13. if (seq >= str.length) seq = 0;
    + H2 u6 u! V) |; x6 t! B1 c
  14. }4 Q: K9 K; j2 W, N8 n6 b
  15. </script>
    $ r9 _  R9 x6 p) }
  16. </head>
    $ Z  c! U" M* k* f$ o4 p
  17. <body onload="setInterval('scroll()',second)">
    : K0 O8 y' O% b. e* V& p
  18. <div id="word"></div><br/><br/>: ]+ E7 w( V' \4 Q5 d7 ?9 k
  19. </body>
    0 C! K. O, l. w3 g
  20. </html>
复制代码
例2.当焦点在输入框的时候,定时检查输入框信息,焦点不在时不执行检查动作。' \, @* _( t. V# y
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    # l6 T6 Q2 I: [
  2. <html xmlns="http://www.w3.org/1999/xhtml">
    + I5 Z5 G4 L3 l& R
  3. <head>3 Q/ C) Z) z6 j! }
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />1 I3 _5 B, Y: \
  5. <title>无标题文档</title>+ G; Q- F" n. }1 [3 v" G
  6. <script language="JavaScript" type="text/javascript">; s1 u8 |. }' V7 O) [' }1 g
  7. var second=5000; //间隔时间5秒钟
    , c% w, D6 H3 {
  8. var c=0;7 @0 k" L+ @* y7 E
  9. function scroll() {3 ^. \( V, E* [
  10. c++;
    ( U9 `2 B- ^* v" l
  11. if ("b" == document.activeElement.id) {
    ) [+ D+ D! i4 e0 c9 M: W3 F
  12. var str="定时检查第<b> "+c+" </b>次<br/>";
    ' \% q/ D$ b: E; b5 m9 N
  13. if(document.getElementByIdx_x_x('b').value!=""){; B( Q4 [+ `6 I  B: W
  14. str+="输入框当前内容为当前内容为<br/><b> "+document.getElementByIdx_x_x('b').value+"</b>";' G& Q. E* N- ^  p+ D0 m6 @% q. ?
  15. }
    5 ]( E3 D! b! h$ h& N; I
  16. document.getElementByIdx_x_x('word').innerHTML = str;' N* Y8 x5 D& i0 @2 P- b# M8 q
  17. }6 T) E% Q* ~5 G# R
  18. }
    ! Q4 K6 X! H9 \' Q
  19. </script>7 x% I, r: b9 r% C  U. T& N# q
  20. </head>
    2 Y8 |1 k& k- `4 l
  21. <body>9 `- ~7 \* C4 i! T- ~
  22. <textarea id="b" name="b" style="height:100px; width:300px;" onfocus="setInterval('scroll()',second)"></textarea><br/><br/>
    1 {! ?( g  ?6 i9 k: T+ k/ X
  23. <div id="word"></div><br/><br/>$ t0 \0 V6 R) ^2 O2 m: C% ^; g& }
  24. </body>
    9 a. b" k0 o3 H2 b) v! d0 L
  25. </html>
复制代码
例3.下面这个是最简单的例子,定时器时间到达后弹出警告窗口。
6 U& G: k4 P" p5 m% z: D) n7 l
  1. <html xmlns="http://www.w3.org/1999/xhtml">- Q5 e3 k4 j$ Y2 B7 I8 J: {4 l
  2. <head>; j3 y: N; I- c9 }* W4 D# Y" ]& M
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />: }' {6 t4 m9 @7 g
  4. <script language="javascript">/ Q: C( F7 U2 W( d0 G' q4 L( ?
  5. function count() {
    4 r' l5 O. U3 j7 C2 \
  6. document.getElementByIdx_x_x('m').innerHTML="计时已经开始!";! r' G+ p$ o4 E0 W' @: H% m
  7. setTimeout("alert('十秒钟到!')",10000)! T, J( ], h* y" }  v
  8. }
    4 u/ |- i0 U, Y; x. q$ i% K+ v
  9. </script>
    & q1 q) K* h; T8 I/ L7 O, R
  10. <body>3 ^# w3 p$ w# t; Q/ g% h* Z
  11. <div id="m"></div>
    5 ?) b0 ]( r/ I4 h  k1 y
  12. <input TYPE="button" value=" 计时开始" onclick="count()">
    % Q8 e& k: v0 I% b
  13. </body>
    7 o7 [  {6 J5 a6 B& V8 h
  14. </html>
复制代码
例4:倒计时定时跳转
6 T; _' ~) q. L7 b
  1. <html>
    4 {# I- V" z2 m' {
  2. <head>
    ) k0 N: D$ ~$ v% P8 P& A5 w) S
  3.   <base href="<%=basePath%>">
    $ E4 k- f# M4 }& l
  4.   <title>My JSP 'ds04.jsp' starting page</title>
    " g+ v  w, r  E* j& i+ u
  5.   <span id="tiao">3</span>
    0 V9 r2 E7 X* g0 Y, e
  6.   <a href="javascript:countDown"> </a>秒后自动跳转……0 F1 Y! k9 G: J/ ]# m& N% f
  7.   <meta http-equiv=refresh content=3;url= '/ds02.jsp'/>+ V. Y1 A- g- [# B8 a5 ]1 A5 [
  8.   <!--脚本开始-->
    " y" |9 @# a$ j8 U
  9.   <script language="javascript" type="">
    ' U, H8 m* b  f. J, h
  10. function countDown(secs){
    , P& g% Y7 h% S+ q3 A6 U- U9 K$ `! r
  11. tiao.innerText=secs;; e1 W) n0 c5 e# e- s8 F: A
  12. if(--secs>0)
    2 w  m7 ^0 O7 c6 a9 @
  13.   setTimeout("countDown("+secs+")",1000);$ f3 j; b! K1 \( R5 T: V# d
  14. }$ I2 Y8 ^* ^4 k/ ~3 R- e: O3 D7 X
  15. countDown(3);4 D% X3 G  C8 w2 c5 l2 h/ `
  16. </script>
    / Q. [" x) a9 F5 m1 A/ r. G
  17.   <!--脚本结束-->
    7 Q0 F4 ]3 r2 r& c+ M
  18. </head>
复制代码
例6:" L. S# m5 p- j+ i  e: e! j
  1. <head> 0 B  W% x* X2 r% L* M
  2.     <meta http-equiv="refresh" content="2;url='b.html'"> # D/ V2 f4 m9 v; g
  3. </head>
复制代码
例7:
% k( a3 L; j( N* O0 `
  1. <script language="javascript" type="text/javascript">
      f% V" @- L: F9 S) C
  2. setTimeout("window.location.href='b.html'", 2000);
    ( ]* e4 c: W3 G: q+ `& |
  3. //下面两个都可以用; k  A1 w& Y4 z: b& q: d
  4. //setTimeout("javascript:location.href='b.html'", 2000);/ G0 a4 y. s( s. J' X, P
  5. //setTimeout("window.location='b.html'", 2000);% h+ m9 T) P, T% J. g5 [& b
  6. </script>
复制代码
例8:$ R* X* o& L( W# g4 a
  1. <span id="totalSecond">2</span>
    & G% E4 B7 [# C% d7 Z
  2. <script language="javascript" type="text/javascript">
    # Q0 e' L# T8 I8 w) Z. m" Z0 ^9 {
  3. var second = document.getElementByIdx_x('totalSecond').innerHTML;
    ' ]( L5 x, |% |; I8 F' X
  4. if(isNaN(second)){
    / X  c2 I% e. P# R& b; T* R
  5.   //……不是数字的处理方法
    * Q( {7 B4 m# I2 A$ ~3 |
  6. }else{
    % O# B3 O6 r% l, T: l* T) ?
  7.   setInterval(function(){$ v% c0 q9 E2 Z) d% U" I- j4 T" J
  8.    document.getElementByIdx_x('totalSecond').innerHTML = --second;
    ) r  s' m' {& m- H
  9.    if (second <= 0) {
    , ]6 _/ Q1 a5 _, k
  10.     window.location = 'b.html';
    , Q/ H. Q+ j: m
  11.    }
      T9 Z, e6 f. I4 E$ v8 |3 u
  12.   }, 1000);- }+ j- X/ G% @5 Y: r
  13. } 4 j4 _$ x) M/ H1 O7 K, q
  14. </script>
复制代码
% K) b1 `4 q0 A9 R

5 |/ H2 I6 s1 }
/ C( I0 K$ c/ i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-29 07:16 , Processed in 0.121625 second(s), 22 queries .

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