8

可能重复:
javascript: pause setTimeout();

我正在使用 jQuery 并为我的网站开发通知系统。通知使用 setTimeout 函数自动淡出。

如何停止 setTimeout 调用的计时器?

例如,我想在鼠标悬停在通知上方时暂停 setTimeout 调用并继续倒计时 mouseout ...

我用谷歌搜索了“暂停 setTimeout”,但没有运气。

我目前正在使用 clearTimeout 清除 setTimeout 调用,同时在 mouseout 上淡出通知,但如果有这种暂停效果会很好。

有任何想法吗?

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 回答