2017-09-17 5 views
0

Wie kann eine andere Funktion nach clearTimeout (Timer) neu gestartet werden?Neustart-Timer nach clearTimeout (Timer)

Ich habe die refreshTable() -Funktion nach 7 Sekunden Inaktivität (kein Mousemove-Ereignis) zu stoppen. Kann die Aktualisierung neu gestartet werden, wenn der Client die Maus nach der Inaktivität bewegt?

Die oberste Funktion refreshTable() möchte ich wie möglich verlassen.

Codepen demo

//====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()}); 

So etwas wie das Bild unten ist das Ziel.

enter image description here

+0

Könnten Sie bitte über ein bisschen mehr klar sein, was Sie versuchen wollen, zu erreichen, zu helfen, aber nicht verstehen, was Sie brauchen! – Eladian

+0

Die Top-Funktion (refreshTable()) Ich möchte stoppen/aussetzen, wenn der Client inActive ist. Wenn der Client (returns) die Maus bewegt, wird refreshTable() neu gestartet oder fortgesetzt. Danke – Kerry7777

+0

"Inaktiv" ist ein Wort, also bin ich nicht sicher, camel casing es hilft jedem. Es macht es etwas schwerer IMO zu lesen, da es mich "in einem aktiven was" denken lässt. 'clientInactive' ist ein besser verständlicher Variablenname. – jdgregson

Antwort

1

Ich würde vorschlagen, dass Sie eine Funktion in Ladung stoppen sie das Timeout und ein verantwortlicher starten. Versuchen Sie folgendes:

//====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>

+0

Schön. Danke mein Herr! – Kerry7777

+0

Eine kleine Änderung besteht darin, activityTimeout = setTimeout (inActive, 7000) zu machen; Statt 5000. – Kerry7777

Verwandte Themen