jQuery: Fire mousemove Ereignisse seltener

7

Ich versuche, einen sauberen Weg zu finden, Mausbewegungen zu aggregieren, so dass ich sicherstelle, dass mein Code aufgerufen wird, aber nur einmal alle 250-300 Millisekunden.

Ich habe darüber nachgedacht, so etwas wie das Folgende zu verwenden, habe mich aber gefragt, ob es ein besseres Muster gibt oder etwas, das jQuery bietet, das dasselbe tut:

%Vor%

BEARBEITEN: Die untenstehende akzeptierte Antwort würde für diese Situation perfekt funktionieren. Ich habe jedoch festgestellt, dass die in der Antwort angegebene Funktion mousestop() mein Bedürfnis nach Aggregation tatsächlich eliminiert hat Lesen Sie diese Frage und suchen Sie nach einer Antwort. Sehen Sie, ob das mousestop -Plugin das ist, was Sie wirklich tun brauche!

    
Topher Fangio 10.01.2011, 15:35
quelle

9 Antworten

5

Ihr Code ist in Ordnung, außer dass Sie das Zeitlimit löschen sollten , bevor Sie es auf null setzen oder es möglicherweise tun Leck:

%Vor%

Als Alternative könnten Sie mousemove / mousestop in Verbindung mit window.setInterval

%Vor%     
Darin Dimitrov 10.01.2011, 15:37
quelle
16

Nachdem ich die Lösung in der angenommenen Antwort ausprobiert habe, habe ich herausgefunden, dass, wenn sich die Maus ständig bewegt, insbesondere in einer kreisförmigen Bewegung, das Ereignis movemove () kontinuierlich ausgelöst wird, aber die Mauskoordinaten gleich bleiben. Also habe ich eine einfachere Lösung gefunden, die mousestop () und setTimeout beseitigt.

%Vor%

Damit wird handleMouseMove () ca. alle 100ms korrekt aufgerufen. (Beachten Sie, dass ich ungefähr gesagt habe, weil zeitliche Verzögerungen und Intervalle in JavaScript nicht in Echtzeit garantiert sind)

    
Ethan 05.01.2012 14:22
quelle
4

Eine Lösung und eine Frage ^^

Was ist mit diesem Ansatz ohne eine globale Variable? Ist das eine geeignete Lösung?

%Vor%     
Andreas 10.01.2011 15:47
quelle
3

Eine einfache Möglichkeit, die Mausposition in einer benutzerdefinierten Periode von Millisekunden zu erhalten

%Vor%     
chilljul 23.02.2013 20:20
quelle
2

Sie suchen Code Throttling / Debouncing.

Ссылка Ссылка

Beispiel von underscore.jS

%Vor%     
skibulk 10.09.2015 13:25
quelle
1

Das war eine wirklich interessante Frage. Ich fand einen weniger hackischen Weg, dies zu tun, und Sie können diese Live-Demo von das folgende Snippet:

%Vor%     
mekwall 10.01.2011 16:13
quelle
1

Sie können einige Zeilen speichern, indem Sie das Zeitlimit verwenden, um den Timer zu löschen:

%Vor%     
Peter Hollingsworth 17.08.2012 17:47
quelle
1

Ich weiß, dass ich ein wenig zu spät zur Party komme, aber es könnte für Leute nützlich sein, die diesen Thread besuchen, hier sind meine 2 Cent.

Mit dem Modulo-Operator und einfachen Zahleninkrementen können Sie die Feuerrate Ihrer Funktion bei minimalem Leistungseinbruch drosseln;

%Vor%

Wenn Sie darüber hinaus Angst haben, das maximale Integer-Limit zu erreichen, können Sie die gefeuerte Variable alle X tausend Treffer zurücksetzen (wiederum mit dem Modulo-Operator) oder indem Sie das mouseout-Ereignis verwenden.

    
Thieu 30.12.2015 14:38
quelle
0

Warum nicht setInterval () anstelle von Zeitüberschreitungen verwenden?

    
hardyharzen 10.01.2011 15:51
quelle

Tags und Links