setInterval 和 setTimeout

这两个函数都是定时器,都是window对象的函数,但是还是有很多区别的。

1.根本区别

setTimeout("function", time),function为函数名或代码,time单位毫秒,指在载入后延迟指定时间去执行函数一次

setInteval("function", interval),指在载入后每隔指定时间执行一次

2.setTimeout循环调用

setTimeout 可以通过写在函数中,然后function指定为这个外部函数,来达到循环延迟执行的效果,类似setInterval。

function movePic(nowid, nextid, direction){
    now = document.getElementById(nowid+"");
    next = document.getElementById(nextid+"");
    //为防止频繁快速调用(如鼠标很快的移动)造成的拉扯,所以每次都将积累在setTimeout队列中的事件清除;
    if(pic.movement){
        clearTimeout(pic.movement);
    }
    var nowleft = parseInt(now.style.left);
    var nextleft = parseInt(next.style.left);
    var dist = 0;
    if(direction){
        var nowtoleft = -800;
    }
    else{
        var nowtoleft = 800;
    }
    if(nowleft == nowtoleft){return true;                 //相等时返回函数,停止循环调用
    }
    else if(nowleft > nowtoleft){
        dist = Math.ceil((nowleft - nowtoleft)/20);//变速运动
        nowleft -= dist;
        nextleft -= dist;
    }
    else{
        dist = Math.ceil((nowtoleft - nowleft)/20);//变速运动
        nowleft += dist;
        nextleft += dist;
    }
    now.style.left = nowleft+‘px‘;
    next.style.left = nextleft+‘px‘;
    var repeat = "movePic(‘"+nowid+"‘,‘"+nextid+"‘,"+direction+")";
    //movement设置成全局变量会造成上面开始那里“没有设置就清除”的错误;若设置成局部变量,
    //则局部变量在clearTimeout函数的上下文里不存在,使其不能正常工作;
    //所以设置成一个变量的属性;
    pic.movement = this.setTimeout(repeat, 1);
}

这有几个特点:

可以通过逻辑来指定何时停止循环,通过return方式;

setInterval每隔固定时间就调用,不管前面的有没有完成,而这种setTimeout的方式可以保证是在前面函数执行完毕后再计时延迟调用的。

3.clearTimeout 和 clearInterval

clearInterval 可以使定时循环停止,而clearTimeout一般是如上面注释那样,清除积累队列,避免拉扯。

为了可以清除,要把定时函数赋给一个变量,而这个变量也是有所不同的:

setInterval可以直接赋给一个全局变量,不会有问题;

在通过嵌套循环的方式用setTimeout时就要注意了,这个变量设置成全局变量会造成上面开始那里“没有设置就清除”的错误;若设置成局部变量,则局部变量在clearTimeout函数的上下文里不存在,使其不能正常工作;所以,一般将它作为被操作对象的属性,最开始清除时,属性存在才清除。

时间: 2024-08-11 09:30:39

setInterval 和 setTimeout的相关文章

javascript中window与document对象、setInterval与setTimeout定时器的用法与区别

一.写在前面 本人前端菜鸟一枚,学习前端不久,学习过程中有很多概念.定义在使用时容易混淆,在此给向我一样刚踏入前端之门的童鞋们归纳一下.今天给大家分享一下js中window与document对象.setInterval与setTimeout定时器的用法与区别.讲得不对的地方,烦请大家指正,还望前辈.大牛多多指教! 二.window对象与document对象的用法和区别 window是全局对象,document是window对象的一个属性它也是一个对象.如图: document对象指的页面这个文档

关于setInterval和setTImeout中的this指向问题

前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例: var num = 0; function Obj (){ this.num = 1, this.getNum = function(){ console.log(this.num); }, this.getNumLater = function(){ setTimeout(function(){ console.log(this.num)

js中setInterval与setTimeout用法

setTimeout 定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: code (必需):要调用的函数后要执行的 JavaScript 代码串. millisec(必需):在执行代码前需等待的毫秒数. 提示: setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). 两种调用函数的写法:

JavaScript定时调用函数(SetInterval与setTimeout)

setTimeout和setInterval的语法相同.它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码. 不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间间隔,它还会自动重复执行代码,而setTimeout只执行一次那段代码. 区别:window.setTimeout("function",time)://设置一个超时对象,只执行一次,无周期 window.setInter

JS里设定延时:js中SetInterval与setTimeout用法

js中SetInterval与setTimeout用法 JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操作. setTimeout("function",time) 设置一个超时对象 setInterval("function",time) 设置一个超时对象 SetInterval为自动重复,setTimeout不会重复. clearTimeout(对象) 清除已设置的se

js中setInterval与setTimeout用法 实现实时刷新每秒刷新

setTimeout 定义和用法:  setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法:  setTimeout(code,millisec) 参数:  code (必需):要调用的函数后要执行的 JavaScript 代码串. millisec(必需):在执行代码前需等待的毫秒数. 提示:  setTimeout() 只执行 code 一次.如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout(). 两种调用函数的

JavaScript函数setInterval()和setTimeout()正确的写法

一.常规写法 1.1 不传参数 function a (x, y) { var i = 0; var b = function(){ console.log((x * y) + (i++)); } return b; } var c = a(1, 2); setInterval('c()', 1000); 1.2 传参数 function c (x, y) { console.log(x * y); } setInterval('c(1, 2)', 1000); 二.改进写法 2.1 不传参数

JS中setInterval、setTimeout不能传递带参数的函数的解决方法

setInterval 和 setTimeout 这两个函数比较好用,但会遇到比如说我隔个几秒后要执行的函数是带参数的,这种情况怎么办?可以用匿名函数包装处理 //不带参数的函数 function test(){} setTimeout(test,1000) //带参数的函数,用匿名函数包装(可以实现动态传参) function onemodelanima(o, tobestatus, time, easing, origin){ if(easing == null){ easing = "&q

clearInterval,setInterval,clearTimeout,setTimeout

setInterval("f()",1000)  每隔1秒就执行一次f() clearInterval   关闭clearInterval setTimeout("f()",1000)  1秒后执行f(),只执行一次 clearTimeout  关闭setTimeout 1.简单版应用html代码 <html> <head> <script type="text/javascript"> var c=0 var

第46天:setInterval与setTimeout的区别

js的setTimeout方法用处比较多,通常用在页面刷新了.延迟执行了等等.今天对js的setTimeout方法做一个系统地总结. setInterval与setTimeout的区别 说道setTimeout,很容易就会想到setInterval,因为这两个用法差不多,但是又有区别,今天一起总结了吧! 1.setTimeout 定义和用法: setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式. 语法: setTimeout(code,millisec) 参数: code (必