2016-09-30 1 views
0

Beim Laden der Seite sollten wir 15 Sekunden warten und dann nach Benutzeraktivitäten in Form von Mausbewegungen suchen. Wenn eine Benutzeraktivität vorliegt, muss der Code erneut ausgelöst und 15 Sekunden auf die Benutzeraktivität gewartet werden.Wie warte ich auf ein bestimmtes Intervall, dann checke ich auf Benutzeraktivität und Feuercode und fange wieder an zu warten?

Mein bester Schuss ist unten. Ich habe ein Intervall erstellt, das die Erlaubnis gibt, alle 15 Sekunden zu überprüfen, und ein weiteres Intervall, das nach der Erlaubnis sucht und versucht, den Code bei der ersten Mausbewegung auszulösen und dann die Erlaubnis zurückzusetzen - jede Sekunde. Die erste Überprüfung ist korrekt (sie wartet 15 Sekunden und wird erst ausgelöst, wenn sich die Maus bewegt), aber dann wird der Code unabhängig von der Benutzeraktivität alle 15 Sekunden abgefeuert - allerdings nur dann, wenn das Fenster scharf ist . Ich vermute, dass mein Fehler in der Maus liegt, aber ich bin mir nicht sicher.

var allow = false; 
setInterval(permission, 15000); 
function permission() {  
    if (allow == false){ 
     allow = true; 
    } 
} 

setInterval(function() { 
    $('body').one('mousemove', function() { 
     if (allow == true){ 
      alert("code firing"); 
      allow = false; 
      $('body').off("mousemove") 
     } 
    }); 
}, 1000); 

Antwort

0

Dafür sollten Sie setTimeout verwenden, da das Intervall, das Sie benötigen, nicht konstant ist: Sie wissen nicht, wann der Benutzer die Maus bewegen wird, und der Zeitraum von 15 Sekunden sollte wieder bei 0 beginnen.

Hier ist eine Demo mit 3 Sekunden wartet (es zu testen schnell):

var allow; 
 
function lockUp() { 
 
    allow = false; 
 
    $('#output').text("No permission for 3 seconds!"); 
 
    setTimeout(function() { 
 
     $('#output').text("Permission!"); 
 
     allow = true; 
 
    }, 3000); 
 
} 
 

 
// start by locking for 3 secs  
 
lockUp(); 
 

 
$(document).on('mousemove', function() { 
 
    if (!allow) return; // not allowed 
 
    lockUp(); 
 
    // Perform the action here... 
 
    // ... 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="output"></div>

+0

Dieser scheint am vorhersehbarsten zu funktionieren. Mein Gehirn wird zu Spaghetti, wenn ich mit Timern arbeiten muss! Danke für die Bemühung. – jordy

0

Sie können eine Variable verwenden, um die letzte Mausbewegung zu verfolgen.

var lastMove = new Date(); // assume last move was now 

$(document).on('mousemove', function() { 
    lastMove = new Date(); 
}); 

setInterval(function() { 
    var currentTime = new Date(); 

    // compare dates in milliseconds to see if the difference is greater than 15000 
    if (currentTime.getTime() - lastMove.getTime() >= 15000) { 
     // if it's greater, trigger your code 
    } 
}, 5000); // perform this check every 5 seconds 

I führen die Überprüfung alle 5 Sekunden, so dass die maximal mögliche Verzögerung 20 Sekunden betragen würde.

0

Sie sollten nur die zweite setInterval entfernen.

Ihre erste setInterval setzt alle 15 Sekunden allow auf wahr.

on('mousemove', function() { 
    if(allow){ 
      // do stuff 
      allow = false; 
    } 
}); 

Dieser Teil wird ausgelöst, wenn die Maus bewegt wird. Aber es wird nur wirksam, wenn allowTrue ist. Das ist also was du willst. Da "allow" auf "true" alle 15 Sekunden eingestellt ist, werden Ihre Daten nur alle 15 Sekunden ausgeführt (natürlich nur, wenn die Maus bewegt wird).

Natürlich ist es wichtig, dass Sie allow auf false setzen nachdem Sie Ihre Sachen gemacht haben.

+0

Ich denke, das der Code-Block ist ich den ganzen Tag zu schreiben versuchte, aber ich habe stecken in einer konzeptionellen Box über Timer. Danke dafür! – jordy

+0

Froh ich könnte helfen :) – JHolub

+0

Eigentlich scheint es nicht zu halten, wenn Sie länger als 15 Sekunden warten. Der Code kann zweimal schnell ausgelöst werden, bevor der Timer wieder einsetzt:/ – jordy

Verwandte Themen