猿吟鹤唳本无意,不知下有行人行

setTimeout与setInterval区别

http://yulimeander.blog.sohu.com/104279384.html

 

 

window对象有两个主要的定时方法,分别是settimeout 和 setinteval  他们的语法基本上相同,但是完成的功能取有区别。 

  settimeout方法是定时程序,也就是在什么时间以后干什么。干完了就拉倒。 

  setinterval方法则是表示间隔一定时间反复执行某操作。 

  如果用settimeout实现setinerval的功能,就需要在执行的程序中再定时调用自己才行。如果要清除计数器需要 根据使用的方法不同,调用不同的清除方法: 

1.setTimeout(表达式,延时时间) 
在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次 ,setTimeOut 延迟执行一次(只执行一次) 放控制函数内部

例子:setTimeout调用又返回值的函数

<html>
<head>
<title>setTimeout调用又返回值的函数</title>
<script language="javascript" type="text/javascript">
    var retValue = "";

    function test()
    {
        return "哈哈哈哈哈";
    }

    function clickButton1()
    {
        var iTimeoutId = setTimeout("retValue = test() ",1000);
    }
    
    function clickButton2()
    {
        alert(retValue);
    }
    
</script>
</head>
<body>
    <input type="button" onclick="clickButton1()" value="button1">
    <input type="button" onclick="clickButton2()" value="button2">
</body>
</html>
例子:用setTimeout实现的自动变化显示随机数的效果: 

<html> 
<head> 
<script> 
window.onload=sett; 
function sett() 

document.body.innerHTML=Math.random(); 
setTimeout("sett()",500); 

</script> 
</head> 
<body> 
</body> 
</html> 

2.setInterval(表达式,交互时间) 
则不一样,它从载入后,每隔指定的时间就执行一次表达式 ,setInterval 定时执行一次(循环执行) 放控制函数外部 

例子:用setInterval实现的自动变化显示随机数的效果: 

<html> 
<head> 
<script> 
function sett() 

document.body.innerHTML=Math.random(); 

setInterval("sett();", 500); 
</script> 
</script> 
</head> 
<body> 
</body> 
</html>
例子:
<html> 
<head> 
<script language="javascript"> 
function text(){ 
this.aa="aaaa"; 
this.aa="adfadf"; 
window.obj = this; 
this.showMsg=msg; 
function msg(){ 
alert(obj.aa); 
setTimeout("obj.showMsg()",1000); 


var text1=new text; 
text1.showMsg(text1); 
</script> 

</head> 
<body> 
</body> 
</html>

 

 

停止:
主要是利用 
window.clearInterval(intervalID); 
window.clearTimeout(timeoutID); 
<SCRIPT>   
  var   intervalID=0;   
  function   f_start(){   
  intervalID=window.setInterval("f_add()",500);   
  }   
  function   f_add(){   
  }   
  function   f_stop(){   
  window.clearInterval(intervalID);   
  }   
  </SCRIPT>  

 

 

 

 

*********************************

 上一篇写了关于setTimeout的东西,想再写点setInterval的, 并且这次写的严谨些。
    Java可发者熟悉对象的wait()方法,可使程序暂停,再继续执行下一行代码前,等待指定的时间量。 这种功能非常有用,遗憾的是,JavaScript 未提供相应的支持。 但这种功能并非完全不能实现,有几种方法可以采用。
    JavaScript支持暂停和时间间隔,这可有效地告诉浏览器应该何时执行某行代码。 所谓暂停,是在指定的毫秒数后执行的代码。 时间间隔是反复执行指定的代码,每次执行之间等待指定的毫秒数。
    可以用window对象的setTimeout()方法设置暂停。该方法接受两个参数,要执行的代码和在执行它之前要等待的毫秒数(1/1000秒)。第一个参数可以是代码串(与eval()函数的参数相同),也可以是函数指针。例如,下面的代码都在1秒钟后显示一条警告:
    setTimeout("alert(&apos;Hello World!&apos;)",1000);
    setTimeout(function(){ alert(&apos;Hello World!&apos;); },1000);
当然,还可以引用以前定义的函数:
    function sayHelloWorld()
    {
        alert("Hello World!");
    }

    setTimeout(sayHelloWorld,1000);
    调用setTimeout()时,它创建一个数字暂停ID,与操作系统中的进程ID相似。暂停ID本质上是要延迟的进程ID,再调用 setTimeout()后,就不应该再执行它的代码。要取消还未执行的暂停,可调用clearTimeout()方法,并将暂停ID传递给它:
    var iTimeoutId = setTimeout("alert(&apos;Hello World!&apos;)",1000);
    alert(iTimeoutId);
    clearTimeout(iTimeoutId);
其中,iTimeoutId 是一串数字,例如 38734218 

    你也许会问:“为什么要定义暂停,又在执行它之前将其取消呢?”请考虑在大多数应用程序中可见的工具提示。当把鼠标移动到一个按钮上时,停留一会,等待出现黄色的文本框,提示该按钮的功能。如果只是短暂的把鼠标该按钮上,然后很快将其移动到另一个按钮上,那么第一个按钮的工具提示就不会显示,这就是要在执行暂停代码前取消它的原因。因为你在执行代码前只想等待指定的时间量。如果用户的操作产生了不同的结果,则要取消该暂停。
    时间间隔与暂停的
运行方式相似,只是它无限此地每隔指定的时间段就重复执行一次指定的代码。可调用setInterval()方法设置时间间隔,它的参数与setTimeout()相同,是要执行的代码和每次执行之间等待的毫秒数。例如:
    setInterval("alert(&apos;Hello world!&apos;)",1000);
    setInterval(function() { alert("Hello world!"); },1000);

    function sayHelloWorld()
    {
        alert("Hello World!");
    }

    setInterval(sayHelloWorld,1000);
    此外,与setTimeout()类似,setInterval()方法也创建时间间隔ID,以标识要执行的代码。clearInterval()方法可用这个ID阻止再次执行该代码。显然。这一点在使用时间间隔时更重要,因为如果不取消时间间隔,就会一直执行它,直到页面被卸载为止。下面是时间间隔用法的一个常见示例:
    var iNum = 0;
    var iMax = 100;
    var iIntervalId = null;

    function incNum()
    {
        iNum++;

        if(iNum == iMax)
        {
            clearInterval(iIntervalId);
        }
    }

    iIntervalId = setInterval(incNum, 500);
    在这段代码中,每隔500毫秒就对数字iNum进行一次增量运算,直到它达到最大值(iMax), 此时该时间间隔将被清除。也可以用暂停实现该操作,这样即不必跟踪时间间隔的ID,代码如下:
    var iNum = 0;
    var iMax = 100;
    function incNum()
    {
        iNum++;
        if(iNum != iMax)
        {
            setTimeout(incNum,500);
        }
    }

    setTimeout(incNum,500);
    这段代码使用链接暂停,即setTimeout()执行的代码页调用了setTimeout()。如果在执行过增量运算后,iNum不等于 iMax,就调用setTimeout()方法。不必跟踪暂停ID,也不必清除它,因为代码执行后,将销毁暂停ID。

 

发表评论

您的电子邮箱地址不会被公开。