Maison >interface Web >js tutoriel >Comment résoudre parfaitement le bug de l'événement mousemove sous Chrome dans jQuery ?

Comment résoudre parfaitement le bug de l'événement mousemove sous Chrome dans jQuery ?

黄舟
黄舟original
2017-06-28 10:41:042950parcourir

Il y a un bug concernant mousemove dans Chrome :
1 Lorsque l'événement mouseup est déclenché, y compris lorsque le clic et le menu contextuel sont déclenchés, l'événement mousemove sera également déclenché
2. . Ce qui est encore plus étrange, c'est que lorsque vous déclenchez continuellement des événements de menu contextuel, l'événement mousedown sera remplacé par mousemove
Une solution à laquelle je pense actuellement est de comparer via timestamp :

var body = document.querySelector("h1");
var timeStamp;

body.addEventListener("mousedown", function (e) {
    console.log("mouse down");
}, false);

body.addEventListener("mouseup", function (e) {
    console.log("mouse up");
    timeStamp = e.timeStamp;
})

body.addEventListener("mousemove", function (e) {
    if (!timeStamp || ( e.timeStamp - timeStamp > 10)) {
        console.log("mouse move");    
    }
})
<.>Cela peut éviter de déclencher l'événement de clic ou le déplacement de la souris provoqué par le bouton gauche de la souris, mais cela ne peut toujours pas résoudre le déplacement de la souris provoqué par le menu contextuel décrit ci-dessus


Existe-t-il une solution parfaite ? Ou nous ne pouvons qu'éviter cette situation autant que possible

<input type="text" id="a1" />

$("#a1").mousemove(function(){
	if ($(this).data("x") === event.pageX && $(this).data("y") === event.pageY) {
		return false;
	}
	$(this).data({"x":event.pageX, "y":event.pageY});
	$(this).after("1");
})
Le but de l'utilisation de jq est d'utiliser .data() dans tous les navigateurs. C’est cette façon de penser, vous pouvez la changer vous-même.

De plus, une fois qu'un élément est lié au déplacement de la souris, ne liez pas d'autres événements.

Enfin : essayez de ne pas utiliser mousemove, cela consomme trop de ressources.

Vous pouvez confirmer s'il s'agit d'une opération de déplacement en comparant la position de la souris


document.onmousemove = function(e) {  
// 不是move操作  if (x === mouseDown.x && y === mouseDown.y) {
        return false;
    }};
document.onmousedown = function (e) {  
mouseDown = { x: e.clientX, y: e.clientY };};


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn