8

重複の可能性:
javascript: pause setTimeout();

jQuery を使用しており、サイトの通知システムに取り組んでいます。通知は setTimeout 関数を使用して自動的にフェードアウトします。

setTimeout 呼び出しのタイマーを停止するにはどうすればよいですか?

たとえば、マウスが通知の上にある間にsetTimeout呼び出しを一時停止し、マウスアウトのカウントダウンを続行したいと思います...

「setTimeout の一時停止」をグーグル検索しましたが、うまくいきませんでした。

私は現在、clearTimeoutでsetTimeout呼び出しをクリアし、同時にマウスアウト時に通知をフェードアウトしていますが、その一時停止効果があるといいでしょう。

何か案は?

4

3 に答える 3

11

これを試して。

var myTimeOut;
$(someElement).mouseout( function () {
  myTimeOut = setTimeout("mytimeoutfunction()", 5000)
});

$(someElement).mouseover( function () {
  clearTimeout(myTimeOut);
});
于 2010-04-12T23:07:28.377 に答える
7

PausableTimeoutクラスを追加するのはそれほど難しくありません:

(有効な JS ではないかもしれませんが、動作させるのは難しくありません):

    function PausableTimeout(func, millisec) {
        this.func = func;
        this.stTime = new Date().valueOf();
        this.timeout = setTimeout(func, millisec);
        this.timeLeft = millisec;
    }
    function PausableTimer_pause() {
        clearTimeout(self.timeout);
        var timeRan = new Date().valueOf()-this.stTime;
        this.timeLeft -= timeRan;
    }
    function PausableTimer_unpause() {
        this.timeout = setTimeout(this.func, this.timeLeft);
        this.stTime = new Date().valueOf();
    }
    PausableTimer.prototype.pause = PausableTimer_pause;
    PausableTimer.prototype.unpause = PausableTimer_unpause;

    //Usage:
    myTimer = new PausableTimer(function(){alert("It works!");}, 2000);
    myTimer.pause();
    myTimer.unpause();

もちろん、そこにいくつかのエラー チェックを追加することは素晴らしい考えです (タイムアウトの一時停止を何度も解除して、何百ものタイムアウトになる可能性を望まないでください!)。仕事:P

于 2010-04-12T23:19:44.347 に答える
4

clearTimeout()mouseover イベントで使用しsetTimeout()、mouseout イベントで再度使用します。

http://www.w3schools.com/jsref/met_win_cleartimeout.asp

于 2010-04-12T23:04:48.553 に答える