代码之家  ›  专栏  ›  技术社区  ›  Pablo

如何暂停设置超时呼叫?[复制品]

  •  7
  • Pablo  · 技术社区  · 16 年前

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

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

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

    例如,我想在鼠标悬停在通知上时暂停setTimeout调用,并继续倒数鼠标输出…

    我不走运地在谷歌上搜索了“暂停设置时间”。

    我目前正在用clearTimeout清除setTimeout调用,同时在mouseout上淡出通知,但是最好有暂停效果。

    有什么想法吗?

    3 回复  |  直到 15 年前
        1
  •  10
  •   John Hartsock    16 年前

    试试这个。

    var myTimeOut;
    $(someElement).mouseout( function () {
      myTimeOut = setTimeout("mytimeoutfunction()", 5000)
    });
    
    $(someElement).mouseover( function () {
      clearTimeout(myTimeOut);
    });
    
        2
  •  6
  •   Ponkadoodle    16 年前

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

        3
  •  4
  •   kapa    15 年前

    使用 clearTimeout() 鼠标悬停事件和使用 setTimeout() 再次出现在mouseout事件中。

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