Ich möchte eine Funktion, die mir sagt, über welchem Element sich der Mauszeiger befindet.
Befindet sich beispielsweise die Maus des Benutzers über diesem Textbereich (mit ID wmd-input
), entspricht der Aufruf window.which_element_is_the_mouse_on()
funktional dem$("#wmd-input")
javascript
dom
mouse
Tom Lehman
quelle
quelle
event.target
oder was auch immerevent.target
?event
ist und wie es dazu kamIn neueren Browsern können Sie Folgendes tun:
Dadurch erhalten Sie eine NodeList mit Elementen, über die sich die Maus derzeit in der Dokumentreihenfolge befindet. Das letzte Element in der NodeList ist das spezifischste. Jedes vorhergehende Element sollte ein Elternteil, ein Großelternteil usw. sein.
quelle
<li>
Weile über andere<li>
Elemente zog.$(':hover')
aber es ist im Grunde das gleiche: jsfiddle.net/pmrotule/2pks4tf6(function(){ var q = document.querySelectorAll(":hover"); return q[q.length-1]; })()
mousemove
Obwohl das Folgende die Frage möglicherweise nicht wirklich beantwortet, da dies das erste Ergebnis des Googelns ist (der Googler stellt möglicherweise nicht genau die gleiche Frage :), hoffe ich, dass es zusätzliche Informationen liefert.
Es gibt zwei verschiedene Ansätze, um eine Liste aller Elemente zu erhalten, über die sich die Maus gerade befindet (für neuere Browser möglicherweise):
Der "strukturelle" Ansatz - Aufsteigender DOM-Baum
Wie in Dhermans Antwort kann man anrufen
Dies setzt jedoch voraus, dass nur Kinder ihre Vorfahren überlagern, was normalerweise der Fall ist, aber im Allgemeinen nicht zutrifft, insbesondere wenn es sich um SVG handelt, bei dem sich Elemente in verschiedenen Zweigen des DOM-Baums möglicherweise überlappen.
Der "visuelle" Ansatz - Basierend auf "visuellen" Überlappungen
Diese Methode verwendet
document.elementFromPoint(x, y)
, um das oberste Element zu finden, es vorübergehend auszublenden (da wir es sofort im selben Kontext wiederherstellen, wird es vom Browser nicht wirklich gerendert) und dann das zweitoberste Element zu finden ... Sieht ein wenig hackig aus, aber Es gibt zurück, was Sie erwarten, wenn sich beispielsweise Geschwisterelemente in einem Baum befinden, die sich gegenseitig verschließen. Bitte finden Sie diesen Beitrag für weitere Details,Probieren Sie beide aus und überprüfen Sie die unterschiedlichen Renditen.
quelle
Document.elementsFromPoint(x, y)
stackoverflow.com/a/31805883/1059828elementFromPoint()
Ruft nur das erste Element im DOM-Baum ab. Dies ist meistens NICHT genug für Entwickleranforderungen. Um mehr als ein Element an der aktuellen Mauszeigerposition zu erhalten, benötigen Sie folgende Funktion:Dies gibt ein Array aller Elementobjekte unter dem angegebenen Punkt zurück. Übergeben Sie einfach die X- und Y-Werte der Maus an diese Funktion.
Weitere Informationen finden Sie hier: https://developer.mozilla.org/en-US/docs/Web/API/document/elementsFromPoint
Bei sehr alten Browsern, die nicht unterstützt werden, können Sie diese Antwort als Fallback verwenden.
quelle
Mouseover-Ereignisse sprudeln, sodass Sie einen einzelnen Hörer auf den Körper setzen und warten können, bis sie aufblähen, und dann das
event.target
oder greifenevent.srcElement
:quelle
document.elementFromPoint(x, y)
.Der folgende Code hilft Ihnen dabei, das Element des Mauszeigers abzurufen. Die resultierenden Elemente werden in der Konsole angezeigt.
quelle
e.clientX
unde.clientY
(getestet in Firefox 59).Sie können das Ziel des
mouseover
Ereignisses anhand eines geeigneten Vorfahren anzeigen:Hier ist eine Demo.
quelle
quelle
DEMO: D Bewegen Sie Ihre Maus im Snippet-Fenster: D.
quelle
Das Ziel des
mousemove
DOM-Ereignisses ist das oberste DOM-Element unter dem Cursor, wenn sich die Maus bewegt:Dies ähnelt der Lösung von @Philip Walton, erfordert jedoch weder jQuery noch ein setInterval.
quelle
Mit diesem Selektor können Sie ein Objekt unterbieten und es dann als Abfrageobjekt bearbeiten.
$(':hover').last();
quelle
Lassen Sie mich zunächst sagen, dass ich die von mir vorgeschlagene Methode nicht empfehle. Es ist viel besser zu Einsatz ereignisgesteuerter Entwicklung und binden Ereignisse nur auf die Elemente , die Sie interessiert sind zu wissen , ob die Maus mit ist vorbei
mouseover
,mouseout
,mouseenter
,mouseleave
etc.Wenn Sie unbedingt wissen müssen, über welchem Element sich die Maus befindet, müssen Sie eine Funktion schreiben, die das
mouseover
Ereignis an alles im DOM bindet , und dann das aktuelle Element in einer Variablen speichern.Sie könnten so etwas wie das:
Grundsätzlich habe ich eine Sofortfunktion erstellt, die das Ereignis für alle Elemente festlegt und das aktuelle Element im Abschluss speichert, um Ihren Platzbedarf zu minimieren.
Hier ist eine funktionierende Demo, die
window.which_element_is_the_mouse_on
jede Sekunde aufruft und protokolliert, über welches Element sich die Maus gerade in der Konsole befindet.http://jsfiddle.net/LWFpJ/1/
quelle
Alte Frage, aber hier ist eine Lösung für diejenigen, die möglicherweise noch Probleme haben. Sie möchten
mouseover
dem übergeordneten Element der untergeordneten Elemente, die erkannt werden sollen , ein Ereignis hinzufügen . Der folgende Code zeigt Ihnen, wie Sie vorgehen müssen.DEMO ON CODEPEN
quelle