Перезапустить таймер после clearTimeout (таймер)

Как можно перезапустить другую функцию после clearTimeout (таймер)?

У меня функция refreshTable() останавливается через 7 секунд бездействия (без события mousemove). Можно ли перезапустить обновление, когда клиент перемещает мышь после бездействия?

Верхнюю функцию refreshTable() я бы хотел оставить как есть, если это возможно.

демонстрация Codepen

//====DONT EDIT THIS FUNCTION IF POSSIBLE====
function refreshTable() {
    window.clearTimeout(timer);
    timer = window.setTimeout(refreshTable, 5000);
    $("body").append("<p>refreshTable every 5 seconds.</p>");
}
//========

var timer = window.setTimeout(refreshTable, 0);




// If theres no activity for 7 seconds do something
var activityTimeout = setTimeout(clientInActive, 7000);

function clientResetActive(){
    $("body").attr('class', 'active');   
    clearTimeout(activityTimeout);
    activityTimeout = setTimeout(clientInActive, 5000);
    //RESTART TIMER WHILE resetActive
    //????????
}

// No activity do something.
function clientInActive(){
    $("body").attr('class', 'clientInactive');
    $("body").append("<p>clientInActive</p>");
    //STOP TIMER WHILE clientInActive
    clearTimeout(timer);
}

// Check for mousemove, could add other events here such as checking for key presses ect.
$(document).bind('mousemove', function(){clientResetActive()});

Что-то вроде изображения ниже является целью.

введите здесь описание изображения


person Kerry7777    schedule 17.09.2017    source источник
comment
Не могли бы вы немного яснее объяснить, чего вы пытаетесь достичь, хотите помочь, но не понимаете, что вам нужно!   -  person Eladian    schedule 17.09.2017
comment
Верхнюю функцию (refreshTable()) я хотел бы остановить/приостановить, когда клиент неактивен. Когда клиент (возвращается) перемещает мышь, функция refreshTable() перезапускается или продолжается. Спасибо   -  person Kerry7777    schedule 17.09.2017
comment
Неактивный - это слово, поэтому я не уверен, что верблюжья оболочка кому-то помогает. Это немного усложняет чтение ИМО, так как заставляет меня активно думать, что? clientInactive — более понятное имя переменной.   -  person jdgregson    schedule 17.09.2017
comment
Изменено имя var на clientInActive. Спасибо за совет по имени.   -  person Kerry7777    schedule 17.09.2017


Ответы (1)


Я бы предложил, чтобы у вас была одна функция, отвечающая за запуск тайм-аута, и одна, отвечающая за его остановку. Попробуй это:

//====DONT EDIT THIS TOP FUNCTION IF POSSIBLE====
function refreshTable() {
    stopRefreshTable();
    window.refreshTableTimer = window.setTimeout(refreshTable, 5000);
    $("body").append("<p>refreshTable every 5 seconds.</p>");
}
//====END====

function startRefreshTable() {
    if(!window.refreshTableTimer) {
        window.refreshTableTimer = window.setTimeout(refreshTable, 0);
    }
}

function stopRefreshTable() {
    if(window.refreshTableTimer) {
        self.clearTimeout(window.refreshTableTimer);
    }
    window.refreshTableTimer = null;
}

function resetActive(){
    $("body").attr('class', 'active');   
    clearTimeout(activityTimeout);
    activityTimeout = setTimeout(inActive, 5000);
    //RESTART TIMER WHILE resetActive
    startRefreshTable()
}

// No activity do something.
function inActive(){
    $("body").attr('class', 'inactive');
    $("body").append("<p>inActive</p>");
    //STOP TIMER WHILE inActive
    stopRefreshTable();
}

// If theres no activity for 7 seconds do something
var activityTimeout = setTimeout(inActive, 7000);
// Check for mousemove, could add other events here such as checking for key presses ect.
$(document).bind('mousemove', function(){resetActive()});
startRefreshTable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

person jdgregson    schedule 17.09.2017
comment
Хороший. Спасибо, сэр! - person Kerry7777; 17.09.2017
comment
Одно небольшое изменение состоит в том, чтобы сделать activityTimeout = setTimeout(inActive, 7000); Вместо 5000р. - person Kerry7777; 20.09.2017