我正在使用 jQuery 并为我的网站开发通知系统。通知使用 setTimeout 函数自动淡出。
如何停止 setTimeout 调用的计时器?
例如,我想在鼠标悬停在通知上方时暂停 setTimeout 调用并继续倒计时 mouseout ...
我用谷歌搜索了“暂停 setTimeout”,但没有运气。
我目前正在使用 clearTimeout 清除 setTimeout 调用,同时在 mouseout 上淡出通知,但如果有这种暂停效果会很好。
有任何想法吗?
我正在使用 jQuery 并为我的网站开发通知系统。通知使用 setTimeout 函数自动淡出。
如何停止 setTimeout 调用的计时器?
例如,我想在鼠标悬停在通知上方时暂停 setTimeout 调用并继续倒计时 mouseout ...
我用谷歌搜索了“暂停 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
clearTimeout()
在 mouseover 事件上使用并setTimeout()
在 mouseout 事件上再次使用。