Je veux une fonction qui me dit sur quel élément se trouve le curseur de la souris.
Ainsi, par exemple, si la souris de l'utilisateur est sur cette zone de texte (avec id wmd-input
), l'appel window.which_element_is_the_mouse_on()
sera fonctionnellement équivalent à$("#wmd-input")
javascript
dom
mouse
Tom Lehman
la source
la source
event.target
quoi que ce soitevent.target
?event
c'est, et comment il estDans les navigateurs plus récents, vous pouvez effectuer les opérations suivantes:
Cela vous donnera une liste de nœuds d'éléments sur lesquels la souris se trouve actuellement dans l'ordre du document. Le dernier élément de la liste de nœuds est le plus spécifique, chaque élément précédent doit être un parent, un grand-parent, etc.
la source
<li>
certain temps sur d'autres<li>
éléments.$(':hover')
mais c'est fondamentalement la même chose: jsfiddle.net/pmrotule/2pks4tf6(function(){ var q = document.querySelectorAll(":hover"); return q[q.length-1]; })()
mousemove
Bien que ce qui suit ne réponde pas réellement à la question, puisqu'il s'agit du premier résultat d'une recherche sur Google (le googleur peut ne pas poser exactement la même question :), j'espère que cela fournira des informations supplémentaires.
Il existe en fait deux approches différentes pour obtenir une liste de tous les éléments sur lesquels la souris se trouve actuellement (pour les navigateurs plus récents, peut-être):
L'approche "structurelle" - Arbre DOM ascendant
Comme dans la réponse de Dherman, on peut appeler
Cependant, cela suppose que seuls les enfants superposeront leurs ancêtres, ce qui est généralement le cas, mais pas vrai en général, en particulier lorsqu'il s'agit de SVG où des éléments dans différentes branches de l'arborescence DOM peuvent se chevaucher.
L'approche «visuelle» - basée sur le chevauchement «visuel»
Cette méthode utilise
document.elementFromPoint(x, y)
pour trouver l'élément le plus haut, le masquer temporairement (puisque nous le récupérons immédiatement dans le même contexte, le navigateur ne le rendra pas réellement), puis continuez pour trouver le deuxième élément le plus haut ... Ça a l'air un peu hacky, mais il renvoie ce que vous attendez quand il y a, par exemple, des éléments frères dans un arbre qui s'occluent les uns les autres. Veuillez trouver cet article pour plus de détails,Essayez les deux et vérifiez leurs différents retours.
la source
Document.elementsFromPoint(x, y)
stackoverflow.com/a/31805883/1059828elementFromPoint()
obtient uniquement le premier élément de l'arborescence DOM. Ce n'est généralement PAS suffisant pour les besoins des développeurs. Pour obtenir plus d'un élément, par exemple à la position actuelle du pointeur de la souris, voici la fonction dont vous avez besoin:Cela renvoie un tableau de tous les objets élément sous le point donné. Passez simplement les valeurs X et Y de la souris à cette fonction.
Plus d'informations ici: https://developer.mozilla.org/en-US/docs/Web/API/document/elementsFromPoint
Pour les navigateurs très anciens qui ne sont pas pris en charge, vous pouvez utiliser cette réponse comme solution de secours.
la source
Survolez la bulle des événements, vous pouvez donc placer un seul auditeur sur le corps et attendre qu'ils bouillonnent, puis saisissez le
event.target
ouevent.srcElement
:la source
document.elementFromPoint(x, y)
.Le code suivant vous aidera à obtenir l'élément du pointeur de la souris. Les éléments résultants s'afficheront dans la console.
la source
e.clientX
et à lae.clientY
place (testé sur Firefox 59).Vous pouvez regarder la cible de l'
mouseover
événement sur un ancêtre approprié:Voici une démo.
la source
la source
DEMO: D Déplacez votre souris dans la fenêtre de l'extrait de code: D
la source
La cible de l'
mousemove
événement DOM est l'élément DOM le plus haut sous le curseur lorsque la souris se déplace:Ceci est similaire à la solution de @Philip Walton, mais ne nécessite ni jQuery ni setInterval.
la source
Vous pouvez utiliser ce sélecteur pour saper l'objet et le manipuler en tant qu'objet jquery.
$(':hover').last();
la source
Permettez-moi de commencer en disant que je ne recommande pas d'utiliser la méthode que je suis sur le point de suggérer. Il est beaucoup mieux à l' événement l' utilisation du développement conduit et se lient uniquement les événements aux éléments que vous êtes intéressé à savoir si la souris ou non plus avec
mouseover
,mouseout
,mouseenter
,mouseleave
, etc.Si vous DEVEZ absolument avoir la capacité de savoir sur quel élément se trouve la souris, vous devez écrire une fonction qui lie l'
mouseover
événement à tout dans le DOM, puis stocker tout l'élément actuel dans une variable.Vous pourriez donc quelque chose comme ça:
Fondamentalement, j'ai créé une fonction immédiate qui définit l'événement sur tous les éléments et stocke l'élément actuel dans la fermeture pour minimiser votre empreinte.
Voici une démo fonctionnelle qui appelle
window.which_element_is_the_mouse_on
chaque seconde et enregistre l'élément sur lequel la souris se trouve actuellement sur la console.http://jsfiddle.net/LWFpJ/1/
la source
Ancienne question mais voici une solution pour ceux qui ont encore du mal. Vous souhaitez ajouter un
mouseover
événement sur l'élément «parent» du ou des éléments enfants que vous souhaitez détecter. Le code ci-dessous vous montre comment s'y prendre.DÉMO SUR CODEPEN
la source