Ich möchte erkennen können, wann die Maus das Fenster verlässt, damit ich verhindern kann, dass Ereignisse ausgelöst werden, während sich die Maus des Benutzers an einer anderen Stelle befindet.
Irgendwelche Ideen, wie das geht?
Ich möchte erkennen können, wann die Maus das Fenster verlässt, damit ich verhindern kann, dass Ereignisse ausgelöst werden, während sich die Maus des Benutzers an einer anderen Stelle befindet.
Irgendwelche Ideen, wie das geht?
Antworten:
Bitte denken Sie daran, dass meine Antwort sehr gealtert ist.
Diese Art von Verhalten ist normalerweise erwünscht, wenn Drag-Drop-Verhalten auf einer HTML-Seite implementiert wird. Die folgende Lösung wurde unter IE 8.0.6, FireFox 3.6.6, Opera 10.53 und Safari 4 auf einem MS Windows XP-Computer getestet.
Zuerst eine kleine Funktion von Peter-Paul Koch; Browserübergreifender Ereignishandler:
Verwenden Sie dann diese Methode, um einen Ereignishandler an das Mouseout-Ereignis für Dokumentobjekte anzuhängen:
Schließlich ist hier eine HTML-Seite mit dem Skript zum Debuggen eingebettet:
quelle
Wenn Sie jQuery verwenden, wie wäre es dann mit diesem kurzen und süßen Code -
Dieses Ereignis wird immer dann ausgelöst, wenn sich die Maus nicht wie gewünscht auf Ihrer Seite befindet. Ändern Sie einfach die Funktion, um zu tun, was Sie wollen.
Und Sie könnten auch verwenden:
Auslösen, wenn die Maus wieder zur Seite zurückkehrt.
Quelle: https://stackoverflow.com/a/16029966/895724
quelle
Das funktioniert bei mir:
quelle
addEvent
?if (!evt.toElement && !evt.relatedTarget)
Um Mausblätter zu erkennen, ohne die Bildlaufleiste und das Feld für die automatische Vervollständigung zu berücksichtigen, oder um Folgendes zu überprüfen:
Bedingungen Erklärungen:
======================= BEARBEITEN ========================== ======
document.addEventListener ("mouseleave") scheint bei einer neuen Firefox-Version nicht ausgelöst zu werden. Mouseleave muss an ein Element wie body oder ein untergeordnetes Element angehängt werden.
Ich schlage vor, stattdessen zu verwenden
Oder
quelle
Die Verwendung des Ereignisses onMouseLeave verhindert das Sprudeln und ermöglicht es Ihnen, leicht zu erkennen, wann die Maus das Browserfenster verlässt.
http://www.w3schools.com/jsref/event_onmouseleave.asp
quelle
document.onmouseleave = function() { alert('You left!') };
Verwenden Sie nicht document.body, das über Bildlaufleisten ausgelöst wird, die den Körper verkleinern! Code zur Verhinderung eines Brandes auf Elementen wird nicht benötigt. Gute Erklärung: developer.mozilla.org/en-US/docs/Web/API/Element/…Keine dieser Antworten hat bei mir funktioniert. Ich benutze jetzt:
Ich verwende dies für ein Widget zum Hochladen von Dateien per Drag & Drop. Es ist nicht absolut genau und wird ausgelöst, wenn die Maus einen bestimmten Abstand vom Fensterrand erreicht.
quelle
Ich habe alles oben versucht, aber nichts scheint wie erwartet zu funktionieren. Nach ein wenig Recherche fand ich heraus, dass e.relatedTarget das HTML ist, kurz bevor die Maus das Fenster verlässt .
Also ... ich habe am Ende folgendes:
Bitte lassen Sie mich wissen, wenn Sie Probleme oder Verbesserungen finden!
Update 2019
(wie user1084282 herausgefunden hat)
quelle
relatedTarget
ist null, wenn die Maus das Fenster verlässt. Inspiriert von der Antwort von @ user1084282, ändern Sie sie in diese:if(!e.relatedTarget && !e.toElement) { ... }
und es funktioniertif(!e.relatedTarget && !e.toElement)
anstelle der Bedingung in der tatsächlichen Antwort verwenden. Es erkennt, dass die Maus den Dokumentkörper verlässt.Ich nehme zurück, was ich gesagt habe. Es ist möglich. Ich habe diesen Code geschrieben, funktioniert perfekt.
arbeitet in Chrom, Firefox, Oper. Aint im IE getestet, aber davon ausgehen, dass es funktioniert.
bearbeiten. IE verursacht wie immer Probleme. Ersetzen Sie die Ereignisse vom Fenster zum Dokument, damit es im IE funktioniert:
Kombiniere sie für die Crossbrowser Kick Ass Cursor Erkennung o0: P.
quelle
wende dieses CSS an:
Dadurch wird sichergestellt, dass das HTML-Element die gesamte Höhe des Fensters einnimmt.
Wenden Sie diese Abfrage an:
Das Problem bei Mouseover und Mouseout besteht darin, dass das Ereignis ausgelöst wird, wenn Sie mit der Maus über HTML auf ein untergeordnetes Element fahren. Die Funktion, die ich gegeben habe, wird beim Bewegen eines untergeordneten Elements nicht ausgelöst. Es wird nur ausgelöst, wenn Sie mit der Maus aus dem Fenster fahren
Nur damit Sie wissen, dass Sie dies tun können, wenn der Benutzer im Fenster mauset:
quelle
Ich versuchte es nacheinander und fand damals die beste Antwort:
https://stackoverflow.com/a/3187524/985399
Ich überspringe alte Browser, um den Code für moderne Browser (IE9 +) zu verkürzen.
Hier sehen Sie die Browserunterstützung
Das war ziemlich kurz, dachte ich
Es blieb jedoch ein Problem bestehen, da "Mouseout" für alle Elemente im Dokument ausgelöst wurde .
Verwenden Sie Mouseleave , um dies zu verhindern (IE5.5 +) . Siehe die gute Erklärung im Link.
Der folgende Code funktioniert ohne Auslösen von Elementen innerhalb des Elements, die sich innerhalb oder außerhalb befinden. Versuchen Sie auch, die Datei außerhalb des Dokuments zu ziehen.
Sie können das Ereignis für jedes HTML-Element festlegen. Das Ereignis
document.body
ist jedoch nicht aktiviert, da die Windows-Bildlaufleiste möglicherweise den Körper verkleinert und ausgelöst wird, wenn sich der Mauszeiger über der Bildlaufleiste befindet, wenn Sie einen Bildlauf durchführen möchten, aber kein mouseLeave-Ereignis darüber auslösen möchten. Aktivieren Sie esdocument
stattdessen wie im Beispiel.quelle
Wenn Sie OnMouseOver ständig im Body-Tag anhören, wird es möglicherweise zurückgerufen, wenn das Ereignis nicht auftritt. Wie Zack feststellt, kann dies jedoch sehr hässlich sein, da nicht alle Browser Ereignisse auf die gleiche Weise behandeln, es gibt sogar einige Möglichkeit, dass Sie den MouseOver verlieren, selbst wenn Sie sich über einem Div auf derselben Seite befinden.
quelle
Vielleicht würde dies einigen von denen helfen, die später hierher kommen.
window.onblur
unddocument.mouseout
.window.onblur
wird ausgelöst, wenn:Ctrl+Tab
oder zu einem anderen FensterCmd+Tab
.Grundsätzlich verliert DIESER Browser-Tab jedes Mal den Fokus.
document.mouseout
wird ausgelöst, wenn:Ctrl+Tab
oder zu einem anderen FensterCmd+Tab
.Grundsätzlich in jedem Fall, wenn Ihr Cursor das Dokument verlässt.
quelle
window.onblur
. +1Dies mag etwas hackig sein, wird aber nur ausgelöst, wenn die Maus das Fenster verlässt. Ich fing immer wieder Kinderereignisse auf und das löste es
quelle
quelle
Das hat bei mir funktioniert. Eine Kombination einiger Antworten hier. Und ich habe den Code, der ein Modell zeigt, nur einmal eingefügt. Und das Modell verschwindet, wenn es irgendwo anders angeklickt wird.
quelle
Siehe
mouseover
undmouseout
.quelle
Ich habe dies nicht getestet, aber mein Instinkt wäre, einen OnMouseOut-Funktionsaufruf für das Body-Tag durchzuführen.
quelle
Dies wird in Chrom funktionieren,
quelle