0

何年も前に、(システム監視用に) 自分のページを最初に作成し始めたとき、次のように追加しました。

<script language="javascript" type="text/javascript">setTimeout("location.reload();",60000);</script>

ページを 60 秒ごとにリロードします。

それは今まで本当にうまくいっていました。しかし、[ページ] は、PHP の増加や JQuery の使用の増加などによって成長しました)。

私は現在、setTimeout を一時停止し、後で再開する方法を探しています。

要素が右クリックされると、いくつかのデータをロードし、その結果を小さなテーブルに表示する jQuery があります。しかし、そのテーブルが表示されているときにページが更新されないようにしたいのです。ページが再び非表示になると、setTimeout が再開されます。

これを行う最良の方法は何ですか?(現在、60000 は構成変数から PHP に設定されています)。

4

2 に答える 2

1

内部で関数を呼び出すために文字列を使用しないでください。使用setTimeoutするのと同じくらい悪いeval()です。代わりにこれを行うことができます:

var 
timeout = null,
start = function () {
    timeout = setTimeout(function () { location.reload(); }, 60000);
},
stop = function () {
    if (timeout) clearTimeout(timeout);
};

start();

// and, on button click, call:
stop();
于 2013-11-01T14:31:48.670 に答える
1

編集

ここで作成したばかげたことをいくつか更新しましたが、現在は機能しています。また、デバッグ用に console.log を追加したので、この投稿で無駄にしている時間を確認できます :]

var pageReloader = function () {

    var timeout = null,
        startTime = 0,
        remainingTime = 0,
        delay = 60;

    return {
        start: function () {
            startTime = (new Date()).getTime();
            remainingTime = delay * 1000;
            timeout = setTimeout(function () {
                location.reload();
            }, delay * 1000);

        },

        stop: function () {
            if (timeout) clearTimeout(timeout);
        },

        pause: function () {
            if (timeout) {
                clearTimeout(timeout);
                remainingTime = (remainingTime) - ((new Date()).getTime() - startTime);
                console.log(remainingTime); // DEBUG
            }
        },

        unpause: function () {
            if (timeout) {
                startTime = (new Date()).getTime();
                timeout = setTimeout(function () {
                    location.reload();
                }, remainingTime);
            }
        }
    };

}();

pageReloader.start();
pageReloader.pause();
pageReloader.unpause();
于 2013-11-01T14:46:20.560 に答える