Je veux pouvoir détecter le moment où la souris quitte la fenêtre afin que je puisse arrêter le déclenchement des événements alors que la souris de l'utilisateur est ailleurs.
Des idées sur la façon de procéder?
Je veux pouvoir détecter le moment où la souris quitte la fenêtre afin que je puisse arrêter le déclenchement des événements alors que la souris de l'utilisateur est ailleurs.
Des idées sur la façon de procéder?
Réponses:
Gardez à l'esprit que ma réponse a beaucoup vieilli.
Ce type de comportement est généralement souhaité lors de l'implémentation du comportement glisser-déposer sur une page html. La solution ci-dessous a été testée sur IE 8.0.6, FireFox 3.6.6, Opera 10.53 et Safari 4 sur une machine MS Windows XP.
D'abord une petite fonction de Peter-Paul Koch; gestionnaire d'événements cross browser:
Et puis utilisez cette méthode pour attacher un gestionnaire d'événements à l'événement mouseout des objets de document:
Enfin, voici une page html avec le script intégré pour le débogage:
la source
Si vous utilisez jQuery, que diriez-vous de ce code court et doux -
Cet événement se déclenchera chaque fois que la souris n'est pas dans votre page comme vous le souhaitez. Changez simplement la fonction pour faire ce que vous voulez.
Et vous pouvez également utiliser:
À déclencher lorsque la souris revient à la page.
Source: https://stackoverflow.com/a/16029966/895724
la source
Cela fonctionne pour moi:
la source
addEvent
?if (!evt.toElement && !evt.relatedTarget)
Afin de détecter la sortie de la souris sans prendre en compte la barre de défilement et le champ autcomplete ou inspecter:
Explications des conditions:
========================= EDIT ========================== ======
document.addEventListener ("mouseleave") ne semble pas être déclenché sur la nouvelle version de Firefox, mouseleave doit être attaché à un élément comme body, ou à un élément enfant.
Je suggère d'utiliser à la place
Ou
la source
L'utilisation de l'événement onMouseLeave empêche la formation de bulles et vous permet de détecter facilement le moment où la souris quitte la fenêtre du navigateur.
http://www.w3schools.com/jsref/event_onmouseleave.asp
la source
document.onmouseleave = function() { alert('You left!') };
utilisez not document.body qui déclenche des barres de défilement qui rétrécissent le corps! Le code pour empêcher le feu sur les éléments n'est pas nécessaire. Bonne explication: developer.mozilla.org/en-US/docs/Web/API/Element/…Aucune de ces réponses n'a fonctionné pour moi. J'utilise maintenant:
J'utilise ceci pour un widget de téléchargement de fichiers par glisser-déposer. Ce n'est pas absolument précis, étant déclenché lorsque la souris arrive à une certaine distance du bord de la fenêtre.
la source
J'ai essayé tout ce qui précède, mais rien ne semble fonctionner comme prévu. Après quelques recherches, j'ai trouvé que e.relatedTarget est le code HTML juste avant que la souris ne quitte la fenêtre .
Alors ... j'ai fini avec ceci:
Faites-moi savoir si vous trouvez des problèmes ou des améliorations!
Mise à jour 2019
(comme user1084282 l'a découvert)
la source
relatedTarget
est nul lorsque la souris quitte la fenêtre. Inspiré par la réponse de @ user1084282, changez-le en ceci:if(!e.relatedTarget && !e.toElement) { ... }
et ça marcheif(!e.relatedTarget && !e.toElement)
place de la condition dans la réponse réelle. Il détecte que la souris quitte le corps du document.Je reprends ce que j'ai dit. C'est possible. J'ai écrit ce code, fonctionne parfaitement.
fonctionne dans chrome, firefox, opéra. Aint testé dans IE mais suppose que cela fonctionne.
Éditer. IE comme toujours cause des problèmes. Pour le faire fonctionner dans IE, remplacez les événements d'une fenêtre à l'autre:
combinez-les pour la détection de curseur crossbrowser kick ass o0: P
la source
appliquez ce css:
Cela garantit que l'élément html occupe toute la hauteur de la fenêtre.
appliquez cette jquery:
Le problème avec mouseover et mouseout est que si vous survolez / sortez du html vers un élément enfant, cela déclenchera l'événement. La fonction que j'ai donnée n'est pas activée lorsque vous passez la souris sur un élément enfant. Il ne se déclenche que lorsque vous sortez / rentrez la souris de la fenêtre
juste pour que vous sachiez que vous pouvez le faire lorsque l'utilisateur souris dans la fenêtre:
la source
J'ai essayé les uns après les autres et j'ai trouvé la meilleure réponse à l'époque:
https://stackoverflow.com/a/3187524/985399
J'ai ignoré les anciens navigateurs, j'ai donc raccourci le code pour qu'il fonctionne sur les navigateurs modernes (IE9 +)
Ici vous voyez le support du navigateur
C'était assez court je pensais
Mais un problème subsistait car "mouseout" se déclenchait sur tous les éléments du document .
Pour éviter que cela ne se produise, utilisez mouseleave (IE5.5 +). Voir la bonne explication dans le lien.
Le code suivant fonctionne sans déclencher sur les éléments à l'intérieur de l'élément à l'intérieur ou à l'extérieur de. Essayez également de glisser-relâcher en dehors du document.
Vous pouvez définir l'événement sur n'importe quel élément HTML. N'activez pas l'événement
document.body
, car la barre de défilement de Windows peut réduire le corps et se déclencher lorsque le pointeur de la souris est au-dessus de la barre de défilement lorsque vous souhaitez faire défiler mais pas déclencher un événement mouseLeave dessus. Activez-le à ladocument
place, comme dans l'exemple.la source
Peut-être que si vous écoutez constamment OnMouseOver dans la balise body, puis rappelez-vous lorsque l'événement ne se produit pas, mais, comme Zack le déclare, cela pourrait être très moche, car tous les navigateurs ne gèrent pas les événements de la même manière, il y en a même certains. possibilité que vous perdiez le MouseOver même en étant sur un div dans la même page.
la source
Peut-être que cela aiderait certains de ceux qui viennent ici plus tard.
window.onblur
etdocument.mouseout
.window.onblur
est déclenché lorsque:Ctrl+Tab
ouCmd+Tab
.Fondamentalement, chaque fois que l'onglet du navigateur perd le focus.
document.mouseout
est déclenché lorsque:Ctrl+Tab
ouCmd+Tab
.En gros dans tous les cas lorsque votre curseur quitte le document.
la source
window.onblur
aussi. +1Cela peut être un peu piraté mais cela ne se déclenchera que lorsque la souris quittera la fenêtre. J'ai continué à attraper des événements d'enfants et cela l'a résolu
la source
la source
Cela a fonctionné pour moi. Une combinaison de certaines des réponses ici. Et j'ai inclus le code montrant un modèle une seule fois. Et le modèle disparaît lorsque vous cliquez ailleurs.
la source
Voir
mouseover
etmouseout
.la source
Je n'ai pas testé cela, mais mon instinct serait de faire un appel de fonction OnMouseOut sur la balise body.
la source
Cela fonctionnera dans Chrome,
la source