Попробуйте это.
var myTimeOut;
$(someElement).mouseout( function () {
myTimeOut = setTimeout("mytimeoutfunction()", 5000)
});
$(someElement).mouseover( function () {
clearTimeout(myTimeOut);
});
Используйте clearTimeout ()
при наведении курсора мыши и снова используйте setTimeout ()
при событии mouseout.
Было бы несложно добавить класс 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