如何暂停setTimeout调用?

时间:2010-04-12 22:59:29

标签: javascript jquery settimeout

  

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

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

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

例如,我希望在鼠标悬停在通知上时暂停setTimeout调用并继续向下计数鼠标输出...

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

我当前正在使用clearTimeout清除setTimeout调用,同时淡出mouseout上的通知但是暂停效果会很好。

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

试试这个。

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

$(someElement).mouseover( function () {
  clearTimeout(myTimeOut);
});

答案 1 :(得分:6)

添加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

答案 2 :(得分:4)

对鼠标悬停事件使用clearTimeout(),并在mouseout事件中再次使用setTimeout()

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