2012-01-30 17 views
0

私はjqueryを使って少しコードを持っています。私は300msの間待ってから変数を変更したいと思います。私はsetTimeoutを試みましたが、うまくいきませんでした。ただちに変数を瞬時に変更しました。しばらく待ってから変数を変更するにはどうしたらいいですか?

setTimeout(animationWait = 0, 300); 

は(私が文書で先にグローバルanimationWaitを定義した)基本的に私は何をしようとしている別のクリックを行うことができる前に終了するのを待つクリックです。だから私は、だから私は、コードを実行するための遅延の後、再び0にanimationWaitを変更する必要が

$('#up-arrow').live('click', function(e) { 

    if(animationWait == 0) { 
     animationWait = 1; 
     .... /* Code */ 
    } 
} 

、私は変数を設定してから300ミリ秒を待つだろうと思っていました。私はたくさんのものを試しましたが、それはまだ動作していない、任意のアイデアですか?

+2

setTimeout(function(){animationWait = 0;}、300); – Cheery

+0

@Cheery - なぜあなたは答えとして投稿しませんでしたか?あなたがすれば私は確かにそれをupvote! – mrtsherman

+2

@mrtsherman私は怠け者で、評判のポイントは気にしません)しかし、とにかく感謝します) – Cheery

答えて

5

あなたはかなり正しいsetTimeoutを使用していません。関数名または無名関数のいずれかを渡す必要があります。

//anonymous function 
setTimeout(function() { animationWait = 0 }, 300); 

//or give it a function name 
function change() { animationWait = 0; } 
setTimeout(change, 300); 
+0

...または文字列を渡しました。 (それは、それがほとんど常に間違った選択であるので完全性のためだけに言及する。) – nnnnnn

+0

ああ神。私は機能を入れていないとは信じられません。私はとても愚かです!ありがとう。 – Johnny

0

渡すパラメータは評価文です。私にとってこれはうまく動作します:

var animationWait = -1; //Initially set the value to -1 
alert(animationWait);  //alert to see the value 
setTimeout("animationWait = 0", 300); //Setting the value to 0 
setTimeout("alert(animationWait)", 400); //Alert after 400 ms 
0

jQuery関数delay()を使ってみましたか? delayedEffectFunction()はあなたが遅延することにしたい作らアップ機能である

$('item').delay(300).delayedEffectFunction(); 

標準的な使用の場合は、次のようになります。

0

あなたの質問に対する答えは、setTimeout()は最初のパラメータが関数参照 - 別の場所で宣言された関数の名前か匿名関数のいずれかであることを前提としています。あなたのコードは、単に式animationWait = 0を実行し、式(0)の結果をsetTimeout()に渡します。

setTimeout(function(){ animationWait = 0; }, 300); 

をしかし、あなたはそのアニメーション・メソッドjQueryを使ってアニメーションを行っている場合:

だから私は匿名関数でラップしてsetTimeout()にその関数を渡すことをお勧めしたいsetTimeout()経由でコードのご一行を実行しますアニメーションが終了したときに実行されるコールバック関数を渡すことができるので、独自のタイムアウトを独自に設定するのではなく、このタイプの処理を行うことができます。

$("#someelement").animate({someproperty:"somevalue"}, 
          300); 

その後、あなたは、このアニメーションが完了した後に呼び出されるコールバック関数を追加できます:あなたのアニメーションは、このようなものだった場合たとえば、私の目には

$("#someelement").animate(({someproperty:"somevalue"}, 
          300, 
          function(){ animationWait = 0; }); 

を、これは別のsetTimeout()より滑らかな印象です独自のタイムアウトをアニメーションに同期させるのではなく、1つの場所で指定する必要があるため、維持するのも簡単です。

.fadeIn(),.hide()などの他のjQueryメソッドにも同様の構文が適用されます。詳細と例については、.animate() docoを参照してください。

関連する問題