1
 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れ、サイクルが作成されてから、がになるまで続行されnます193shiflefペアの場合も同様です。コードは機能していますが、かなり速く機能しています。settimeoutの時間値を減らすか増やすかにかかわらず、同じままです。更新は非常に迅速で、見るのに十分スムーズではありません。

4

3 に答える 3

7

変化する:

window.setTimeout(shiftright(),100);

に:

window.setTimeout(shiftright,100);

不足している親に注意してください。shiftleft()->と同じshiftleftです。

これはJavaScriptでよくある誤解です。setTimeout()関数(shiftright)への参照が必要です。あなたがしているのは、その関数をすぐに呼び出し、そこから返されたものをすべてに渡すことsetTimeout()です。明らかに意図されたものではありません。

于 2012-08-26T12:28:48.933 に答える
0

あなたはwindow.setTimeout間違って使用しています!

window.setTimeout(shiftlef(),100);

関数の戻りコードではなく、関数参照を渡す必要があります。したがって、正しいバージョンは次のようになります。

window.setTimeout(shiftlef,100);
于 2012-08-26T12:29:17.887 に答える
0

setTimeout最初の引数としてfunction-NAMEまたはfunction-"variable"/"pointer"が必要になります。

コードでは、関数呼び出しのRETURN値を最初のパラメーターとして「setTimeout」に渡します。

中かっこを削除するだけです->

window.setTimeout(shiftleft, 100)

于 2012-08-26T12:29:22.473 に答える