如何暂停setTimeout调用?

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

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

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

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

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

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

有任何想法吗?

试试这个。

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

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

在mouseover事件上使用clearTimeout()并在mouseout事件上再次使用setTimeout()

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