setTimeout工作得很快

时间:2012-08-26 12:27:19

标签: javascript

 var k=0;var n=0;
  function shiftrigh(){
  n=n+1;
  if(n<=193)
   window.setTimeout(shiftright(),100);
  else
      n=0;}

function shiftright(){
   k-=1;
   document.getElementById("abcmngcontainer").style.left=k+"px";
   window.setTimeout(shiftrigh(),100);
}

function shiftlef(){
  n=n+1;
  if(n<=193)
   window.setTimeout(shiftleft(),100);
  else
      n=0;}

function shiftleft(){
   k+=1;
   document.getElementById("abcmngcontainer").style.left=k+"px";
   window.setTimeout(shiftlef(),100);
}

嗨,我有上面的代码。调用时函数shiftrigh调用shiftright然后调用一个循环 已创建,然后继续n193shiflef对的情况也是如此。 代码正在运行,但它工作得很快。无论我是减少settimeout中的时间值还是增加它,它都保持不变。更新速度非常快,不够顺畅。

3 个答案:

答案 0 :(得分:7)

变化:

window.setTimeout(shiftright(),100);

为:

window.setTimeout(shiftright,100);

注意丢失的parens。与shiftleft() - &gt;相同shiftleft

这是JavaScript中常见的误解。 setTimeout()需要引用函数(shiftright)。你正在做的是立即调用该函数并将从它返回的任何函数传递给setTimeout()。显然不是意图。

答案 1 :(得分:0)

您使用window.setTimeout错了!

window.setTimeout(shiftlef(),100);

您必须传递函数引用,而不是函数的返回码。 所以正确的版本看起来像这样:

window.setTimeout(shiftlef,100);

答案 2 :(得分:0)

setTimeout需要一个函数-NAME或一个函数 - “variable”/“pointer”作为第一个参数......

在代码中,将函数调用的RETURN值作为第一个参数传递给“setTimeout”....

只需删除大括号 - &gt;

window.setTimeout(shiftleft, 100)