Как приостановить вызов метода setTimeout? [дубликат]

8
задан Community 23 May 2017 в 12:24
поделиться

3 ответа

Попробуйте это.

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

$(someElement).mouseover( function () {
  clearTimeout(myTimeOut);
});
11
ответ дан 5 December 2019 в 07:57
поделиться

Используйте clearTimeout () при наведении курсора мыши и снова используйте setTimeout () при событии mouseout.

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

4
ответ дан 5 December 2019 в 07:57
поделиться

Было бы несложно добавить класс 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

6
ответ дан 5 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: