0

我真的很困惑这些是如何工作的......超时似乎并没有继续运行它调用begin_anim一次然后就是这样......

所以我希望有人能看到我哪里出错并解释我是如何实现的?

这是我的代码:

//test data:
//type = 'up';
//div = document.getElementById('theid');
//marginL = -400;

function timeout_begin(type,div,marginL){   
    setTimeout(begin_anim(type,div,marginL),1000);
}

function begin_anim(type,div,marginL){
    if(type == 'up'){
        if(marginL >= '-200'){ 
                if(marginL > '-200'){ 
                    div.style.marginLeft = '-200px';
                }
            return false;
        }
    marginL += 2;
    div.style.marginLeft = marginL+'px';


    }
    return false;
}

希望你能帮忙!

4

4 回答 4

4

您正在寻找setInterval

此外,最好传入一个实际函数,并且您可以保存对循环的引用,以便以后可以停止它运行,如果您愿意:

var animationLoop = setInterval(function () {
       begin_anim(type, div, marginL);
    }, 1000);

clearInterval(animationLoop); // This would then stop the loop.
于 2013-05-21T04:06:34.463 回答
1

setTimeout应该只调用一次该函数。

如果要重复调用该方法,请使用setInterval(function(){}, 1000/*duration*/)

于 2013-05-21T04:07:02.493 回答
1

首先,你想要setInterval,而不是setTimeout

其次,您将传递对函数的引用,而不是对函数的调用。就像是:

function timeout_begin(type,div,marginL)
{   
  setTimeout(
    function() { 
      begin_anim(type,div,marginL);
    }, 
    1000
  );
}
于 2013-05-21T04:11:26.230 回答
0

setTimeout 预计只在给定超时后执行一次函数。请参阅此处的文档:http: //www.w3schools.com/jsref/met_win_settimeout.asp

您可能正在寻找 setInterval ( http://www.w3schools.com/jsref/met_win_setinterval.asp ),它以您设置的时间间隔执行代码,直到调用 clearInterval。

于 2013-05-21T04:08:38.487 回答