Après une nuit de sommeil, j'ai découvert quelque chose à propos de this question qui, selon moi, est fondamentalement ahurissant, du moins pour moi.Détecter les coordonnées de la souris avec précision
Coordonnées de la souris NE SONT PAS PRÉCIS (Je suppose à une grande vitesse de traitement où toute la toile doit être recréée lorsque le mouvement se produit) comme dans mes codes ci-dessus. Je l'ai testé ce morceau de code par pièce et a découvert que le problème est pas dans ma boucle, mais la précision des
if ((newMouseX !== mouseX) && (newMouseY !== mouseY)).
Si vous avez testé cette partie du code en temps plus lent (ce qui permettra à vos yeux détecter la différence de coordonnées quand «il s'arrête», alors vous vous rendrez compte que newMouseX
& mouseX
sont désactivés par 1-2 pixel 90% du temps,> 2 pixels 9% du temps, et seulement égal à environ 1% du temps . (Je n'ai pas mesuré les statistiques mais c'est ce que j'ai choisi sur plusieurs séries de tests)
Je ne peux pas l'obtenir t o travailler en fiddle mais je pense que vous pouvez le copier sur votre terrain d'essai pour voir ce que je veux dire. Si vous pouvez le faire travailler en fiddle, ce serait génial, donc les experts peuvent le donner en raccourci :)
Cela signifie que la souris est considérée comme étant 'en mouvement' par mon code même si elle devrait être 'arrêtée' , et donc 's'arrête' plusieurs fois entre les deux, appelant ainsi la boucle trop de fois en une seconde, ce qui est le problème que j'ai eu.
Je serais heureux d'entendre les commentaires d'autres experts, y compris ceux qui peuvent tester cela et proposer une précision statistique/conseils.
Mon conseil, et la solution pour le moment, est de considérer le mouvement lorsque la différence est supérieure à 10 pixels de l'une ou l'autre des coordonnées. Bien sûr, cela pose un problème, mais je peux partir avec ça jusqu'à ce qu'une meilleure solution apparaisse.
donc au lieu de
if ((newMouseX !== mouseX) && (newMouseY !== mouseY))
j'ai utilisé
if ((Math.abs(newMouseX - mouseX) > 10) || (Math.abs(newMouseY != mouseY) > 10))
Une autre chose à considérer est de savoir comment faire face à la position de la souris quand il va de ma zone de toile cible ... qui ressemble un mouvement infini en ce moment!
La question:
Comment puis-je obtenir les coordonnées, je peux comparer la souris afin précise mouseX
& newMouseX
?
Merci.
Je ne pense pas que votre code ait beaucoup de sens. Vous avez un écouteur d'événement ** mousemove **. Par définition, cet événement se déclenchera * lorsque la souris se déplace *. Si la souris n'a pas bougé, le gestionnaire d'événements ne se déclenchera pas. – Pointy
Working Fiddle: http://jsfiddle.net/3vEqj/1/ – Ford