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!
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%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)
Sie können einige Zeilen speichern, indem Sie das Zeitlimit verwenden, um den Timer zu löschen:
%Vor%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.
Warum nicht setInterval () anstelle von Zeitüberschreitungen verwenden?
Tags und Links jquery settimeout mousemove