282 votes

Comment puis-je vérifier si la souris se trouve sur un élément dans jQuery ?

Existe-t-il un moyen rapide et facile de le faire dans jQuery pour que je manque?

Je ne veux pas utiliser l'événement mouseover car je l'utilise déjà pour autre chose. J'ai juste besoin de savoir si la souris est sur un élément à un moment donné.

Je voudrais faire quelque chose comme ça, si seulement il y avait une fonction "IsMouseOver":

 function hideTip(oi) {
    setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
 

279voto

Ivo Points 541

Un contrôle de vol stationnaire propre et élégant:

 if ($('#element:hover').length != 0) {
    // do something ;)
}
 

272voto

Arthur Goldsmith Points 2043

Ce code illustre ce que Harry et moi essayons de dire. Quand la souris entre, une info-bulle sort, quand la souris part, elle met un délai pour qu'elle disparaisse. Si la souris entre dans le même élément avant que le délai ne soit déclenché, alors nous détruisons le déclencheur avant qu'il ne s'éteigne en utilisant les données que nous avons stockées auparavant.

 $("someelement").mouseenter(function(){
    clearTimeout($(this).data('timeoutId'));
    $(this).find(".tooltip").fadeIn("slow");
}).mouseleave(function(){
    var someElement = $(this),
        timeoutId = setTimeout(function(){
            someElement.find(".tooltip").fadeOut("slow");
        }, 650);
    //set the timeoutId, allowing us to clear this trigger if the mouse comes back over
    someElement.data('timeoutId', timeoutId); 
});
 

130voto

tal Points 2231

Vous pouvez également utiliser cette réponse: http://stackoverflow.com/a/6035278/8843 pour tester si la souris survole un élément:

 $('#test').click(function() {
    if ($('#hello').is(':hover')) {
        alert('hello');
    }
});
 

100voto

happytime harry Points 1602

Définir un délai d'expiration sur le mouseout pour fadeout et stocker la valeur de retour aux données dans l'objet. Puis onmouseover, annule le timeout s'il y a une valeur dans les données.

Supprimez les données sur le rappel du fondu sortant.

Il est effectivement moins cher d'utiliser mouseenter / mouseleave car ils ne tirent pas pour le menu lorsque les enfants mouseover / mouseout feu.

35voto

SLaks Points 391154

Vous pouvez utiliser l'événement hover jQuery pour effectuer le suivi manuellement:

 $(...).hover(
    function() { $.data(this, 'hover', true); },
    function() { $.data(this, 'hover', false); }
).data('hover', false);

if ($(something).data('hover'))
    //Hovered!
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X