7

だから私はタイマーが5秒ごとに画像のセットを回転させています。したがって、ドキュメントの起動時にこれを実行しています。

$(document).ready(function() {
var intervalID=setInterval(function(){ 
     rotate();    
}, 5000);
});

回転機能は、単に画像を回転させるだけです。ただし、ユーザーが見ている画像を手動で選択することもできます。このため、SetIntervalをキャンセルしてから、5秒後に最初からやり直す必要があります。

私がやろうとしているのは、インターバルをキャンセルしてから、これを実行して最初からやり直すことです。

$('a').click(function(){
 clearInterval(intervalID);   
 intervalID=setInterval(function(){ 
     rotate();    
}, 5000);    
});

しかし、コードは私が期待していたように間隔をリセットしていないようです。

4

3 に答える 3

5

intervalID変数がスコープ内で宣言されている場合.ready()、以下が機能するはずです(テストされていません)。

$(document).ready(function() {
    var rotate = function() { ... },
        intervalID = setInterval(rotate, 5000);

    $('a').click(function() {
       clearInterval(intervalID);   
       intervalID = setInterval(rotate, 5000);    
    });
});
于 2011-07-28T09:21:19.817 に答える
4

intervalIDすべての関数の外で宣言することにより、グローバル変数にするだけです。

現在のコードでは、そのスコープはメソッドに限定されて$(document).ready()いるため、説明する問題が発生する可能性があります。

于 2011-07-28T09:19:59.857 に答える
3

さて、ハンドラーinterverIDから匿名関数内でローカルに宣言しているようです。クリックイベントハンドラーで参照エラー.ready()が発生しないのはなぜかと思います。そこではわからないからです。intervalID

この変数が使用可能であり、両方の関数のコンテキストが共有されていることを確認する必要があります。最も簡単な方法は、スクリプトの周囲に匿名の自己呼び出しメソッドを作成し、その変数をスコープ外として宣言することです。

(function _myPrivateContext($, window, document, undefined) {
    var intervalID = null;

    $(document).ready(function() {
       intervalID = setInterval(rotate, 5000);
    });

    $('a').click(function(){
        clearInterval(intervalID);   
        intervalID = setInterval(rotate, 5000);    
    });

}(jQuery, window, document));
于 2011-07-28T09:20:50.987 に答える