我正在使用jQuery并为我的网站开发通知系统。通知使用setTimeout函数自动淡出。
如何停止setTimeout调用的计时器?
例如,我希望在鼠标悬停在通知上时暂停setTimeout调用并继续向下计数鼠标输出...
我用谷歌搜索“暂停setTimeout”没有运气。
我当前正在使用clearTimeout清除setTimeout调用,同时淡出mouseout上的通知但是暂停效果会很好。
有什么想法吗?
答案 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()
。