如何暂停setTimeout调用?

Pab*_*blo 8 javascript jquery settimeout

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

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

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

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

我用谷歌搜索"暂停setTimeout"没有运气.

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

有任何想法吗?

Joh*_*ock 11

试试这个.

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

$(someElement).mouseover( function () {
  clearTimeout(myTimeOut);
});
Run Code Online (Sandbox Code Playgroud)

  • 图,这是一件很容易写的事.显然,Pablo已经理解了这一点,他能够使用它,修改它并应用他所学到的东西. (5认同)
  • @fig我无法理解你的担忧,但无论如何只是因为我在这里有34的声誉并不意味着我是一个菜鸟.我个人使用SO获取想法和建议,以指导我在正确的方向是不是我问"哟bato我想要一个功能暂停网页中的某些事情,然后实现它". (5认同)

Pon*_*dle 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();
Run Code Online (Sandbox Code Playgroud)

当然,在那里添加一些错误检查是一个好主意(不希望它可以多次取消超时并最终导致数百次超时!),但我会让它成为你的工作:P