Existe-t-il un moyen rapide et facile de le faire dans jQuery qui me 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 survole un élément à un moment donné.
J'aimerais faire quelque chose comme ça, si seulement il y avait une fonction "IsMouseOver":
function hideTip(oi) {
setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
Réponses:
Définissez un délai d'expiration sur la souris pour un fondu et stockez la valeur de retour aux données dans l'objet. Puis à la souris, annulez le délai d'attente s'il y a une valeur dans les données.
Supprimez les données lors du rappel du fondu.
Il est en fait moins coûteux d'utiliser mouseenter / mouseleave car ils ne se déclenchent pas pour le menu lorsque les enfants survolent / survolent.
la source
Ce code illustre ce que happytime harry et moi essayons de dire. Lorsque la souris entre, une info-bulle apparaît, lorsque la souris la quitte, elle fixe un délai pour qu'elle disparaisse. Si la souris entre dans le même élément avant le déclenchement du délai, nous détruisons le déclencheur avant qu'il ne s'éteigne en utilisant les données que nous avons stockées auparavant.
la source
Un contrôle de vol stationnaire propre et élégant:
la source
AVERTISSEMENT:
is(':hover')
est déconseillé dans jquery 1.8+. Voir cet article pour une solution.Vous pouvez également utiliser cette réponse: https://stackoverflow.com/a/6035278/8843 pour tester si la souris survole un élément:
la source
:hover
n'est pas un sélecteur jQuery valide: api.jquery.com/category/selectors (source: bugs.jquery.com/ticket/11574 )document.querySelectorAll(':hover')
Vous pouvez utiliser l'
hover
événement de jQuery pour effectuer le suivi manuellement:la source
$.data
n'implique pas de manipulation de chaîne.J'avais besoin de quelque chose exactement comme ça (dans un environnement un peu plus complexe et la solution avec beaucoup de `` mouseenters '' et `` mouseleaves '' ne fonctionnait pas correctement), j'ai donc créé un petit plugin jquery qui ajoute la méthode ismouseover. Jusqu'à présent, cela a plutôt bien fonctionné.
Ensuite, à n'importe quel endroit du document, appelez-le comme ceci et il renvoie vrai ou faux:
Je l'ai testé sur IE7 +, Chrome 1+ et Firefox 4 et fonctionne correctement.
la source
Dans jQuery, vous pouvez utiliser .is (': hover'), donc
serait désormais le moyen le plus concis de fournir la fonction demandée dans le PO.
Remarque: ce qui précède ne fonctionne pas dans IE8 ou inférieur
Comme alternative moins succincte qui fonctionne dans IE8 (si je peux faire confiance au mode IE8 d'IE9), et le fait sans déclencher
$(...).hover(...)
partout, ni ne nécessite de connaître un sélecteur pour l'élément (dans ce cas, la réponse d'Ivo est plus facile):la source
$(':hover')
fait le travail dans IE8. C'est un pseudo sélecteur CSS2 valide, donc il devrait fonctionner.J'ai pris l'idée de SLaks et l'ai emballée dans une petite classe .
la source
J'ai créé un plugin jQuery qui peut faire cela et bien plus encore. Dans mon plugin, pour obtenir tous les éléments sur lesquels le curseur est actuellement survolé, procédez simplement comme suit:
Comme je l'ai mentionné, il a également beaucoup d'autres utilisations comme vous pouvez le voir dans le
jsFiddle trouvé ici
la source
Comme je ne peux pas commenter, je vais donc écrire ceci comme réponse!
Veuillez comprendre la différence entre le sélecteur css ": hover" et l'événement hover!
": hover" est un sélecteur css et a en effet été supprimé avec l'événement lorsqu'il était utilisé comme ceci
$("#elementId").is(":hover")
, mais dans ce sens, cela n'a vraiment rien à voir avec le survol de l'événement jQuery.si vous codez
$("#elementId:hover")
, l'élément ne sera sélectionné que lorsque vous survolerez avec la souris. la déclaration ci-dessus fonctionnera avec toutes les versions de jQuery en sélectionnant cet élément avec une sélection CSS pure et légitime.D'un autre côté, le survol de l'événement qui est
est en effet déconseillé comme jQuery 1.8 ici l'état du site jQuery:
La raison pour laquelle ils ont supprimé l'utilisation (": hover") n'est pas claire, mais bon, vous pouvez toujours l'utiliser comme ci-dessus et voici un petit hack pour continuer à l'utiliser.
Oh et je ne recommanderais pas la version timeout car cela apporte beaucoup de complexité , utilisez des fonctionnalités de timeout pour ce genre de choses s'il n'y a pas d'autre moyen et croyez-moi, dans 95% des cas, il y a une autre façon !
J'espère pouvoir aider quelques personnes là-bas.
Greetz Andy
la source
Merci à vous deux. À un moment donné, j'ai dû renoncer à essayer de détecter si la souris était encore au-dessus de l'élément. Je sais que c'est possible, mais peut nécessiter trop de code pour accomplir.
Cela m'a pris un peu de temps, mais j'ai pris vos deux suggestions et j'ai trouvé quelque chose qui pourrait fonctionner pour moi.
Voici un exemple simplifié (mais fonctionnel):
Et puis, pour faire fonctionner ce texte, voici tout ce que j'ai à faire:
Avec beaucoup de CSS fantaisistes, cela permet des info-bulles d'aide très intéressantes. Soit dit en passant, j'avais besoin du retard dans la sortie de la souris en raison de minuscules écarts entre les cases à cocher et le texte qui faisaient clignoter l'aide lorsque vous déplacez la souris. Mais cela fonctionne comme un charme. J'ai également fait quelque chose de similaire pour les événements de focus / flou.
la source
Je vois beaucoup de délais d'attente pour cela, mais dans le contexte d'un événement, ne pouvez-vous pas regarder les coordonnées, comme ceci?:
Selon le contexte, vous devrez peut-être vous assurer (this == e.target) avant d'appeler areXYInside (e).
fyi- Je cherche à utiliser cette approche dans un gestionnaire dragLeave, afin de confirmer que l'événement dragLeave n'a pas été déclenché en entrant dans un élément enfant. Si vous ne vérifiez pas que vous êtes toujours à l'intérieur de l'élément parent, vous pouvez par erreur prendre des mesures destinées uniquement lorsque vous quittez vraiment le parent.
EDIT: c'est une bonne idée, mais ne fonctionne pas assez régulièrement. Peut-être avec quelques petits ajustements.
la source
Vous pouvez tester avec
jQuery
si un enfant div a une certaine classe. Ensuite, en appliquant cette classe lorsque vous passez la souris sur et en dehors d'un certain div, vous pouvez tester si votre souris est dessus, même lorsque vous passez la souris sur un élément différent sur la page Beaucoup moins de code de cette façon. J'ai utilisé cela parce que j'avais des espaces entre les divs dans une fenêtre pop-up, et je ne voulais fermer la fenêtre pop-up que lorsque je quittais la fenêtre pop-up, pas lorsque je passais ma souris sur les espaces dans la fenêtre pop-up. J'ai donc appelé une fonction de survol sur la div de contenu (sur laquelle la fenêtre contextuelle était terminée), mais cela ne déclencherait la fonction de fermeture que lorsque je survolais la div de contenu, ET était en dehors de la fenêtre contextuelle!la source
Ce serait la façon la plus simple de le faire!
la source
Voici une technique qui ne repose pas sur jquery et utilise l'
matches
API DOM native . Il utilise des préfixes de fournisseurs pour prendre en charge les navigateurs remontant à IE9. Voir matchesselector sur caniuse.com pour plus de détails.Créez d'abord la fonction matchesSelector, comme ceci:
Ensuite, pour détecter le vol stationnaire:
la source
J'ai répondu à cette question dans une autre question, avec tous les détails dont vous pourriez avoir besoin:
Détecter SI survolant l'élément avec jQuery (a 99 votes positifs au moment de la rédaction)
Fondamentalement, vous pouvez faire quelque chose comme:
Cela ne fonctionne que si
oi
est un objet jQuery contenant un seul élément. S'il y a plusieurs éléments correspondants, vous devez appliquer à chaque élément, par exemple:Cela a été testé à partir de jQuery 1.7.
la source
Voici une fonction qui vous aide à vérifier si la souris est à l'intérieur d'un élément ou non. La seule chose que vous devez faire est d'appeler la fonction où vous pouvez avoir un EventObject associé à la souris. quelque chose comme ça:
Vous pouvez voir le code source ici dans github ou en bas de l'article:
https://github.com/mostafatalebi/ElementsLocator/blob/master/elements_locator.jquery.js
la source
S'étendant sur ce que `` Happytime harry '' a dit, assurez-vous d'utiliser la fonction jquery .data () pour stocker l'ID de délai d'attente. Cela vous permet de récupérer très facilement l'ID de délai d'expiration lorsque le «mouseenter» est déclenché ultérieurement sur ce même élément, ce qui vous permet d'éliminer le déclencheur pour que votre info-bulle disparaisse.
la source
Vous pouvez utiliser les événements mouseenter et mouseleave de jQuery. Vous pouvez définir un indicateur lorsque la souris entre dans la zone souhaitée et désactiver le drapeau lorsqu'il quitte la zone.
la source
J'ai combiné les idées de ce sujet et j'ai trouvé ceci, qui est utile pour afficher / masquer un sous-menu:
Semble fonctionner pour moi. J'espère que cela aide quelqu'un.
EDIT: Réaliser maintenant que cette approche ne fonctionne pas correctement dans IE.
la source
Je n'ai pu utiliser aucune des suggestions ci-dessus.
Pourquoi je préfère ma solution?
Cette méthode vérifie si la souris survole un élément à tout moment choisi par vous .
Mouseenter et : hover sont cool, mais mouseenter ne se déclenche que si vous déplacez la souris, pas lorsque l'élément se déplace sous la souris.
: le vol stationnaire est assez doux mais ... IE
Alors je fais ça:
Non 1. stockez la position x, y de la souris à chaque fois qu'elle est déplacée quand vous en avez besoin,
Non 2. vérifiez si la souris survole l'un des éléments qui correspondent à la requête faites des trucs ... comme déclencher un événement mouseenter
la source
Juste une note sur la réponse populaire et utile d'Arthur Goldsmith ci-dessus: si vous déplacez votre souris d'un élément à un autre dans IE (au moins jusqu'à IE 9), vous pouvez avoir du mal à le faire fonctionner correctement si le nouvel élément a un fond transparent (ce qu'il ferait par défaut). Ma solution de contournement consistait à donner au nouvel élément une image d'arrière-plan transparente.
la source
VIOLON
la source
Vous pouvez utiliser
is(':visible');
dans jquery Et pour $ ('. Item: hover') cela fonctionne aussi dans Jquery.ceci est un snnipet de code htm:
et voici le code JS:
c'est ce dont je parlais :)
la source